【Python】リストや文字列から数字のみ抽出する | 正規表現, Regex使用


Pythonで、スクレイピングなどで抽出したデータ(リストや文字列)から数字のみ抽出(正規表現)する方法をメモしておきます。正規表現のモジュールにはregexを使用しますので、regexをインストールしていない方はインストールしてください。

目的

スクレイピングで抽出したデータから、数字のみを抽出する

実装

正規表現を使って、数字のみ抽出

reモジュールを使用します。ターミナルから以下のコマンドを実行して、regexをインストールしましょう。

$ pip install regex
# または
$ pip3 install regex

その次に、sample.pyにreモジュールをインポート

sample.py
import re

これでreモジュールを使う準備ができました。

文字列から数字のみ抽出

sample.py
import re

dt = "regnkrnfskrngkaer  gksgnkq laergnnktga3r erfkl 登録者数 400人aelrkna erglknnarg"
num = re.sub("\\D", "", dt)
print(num)

# 出力結果
# 400

リストから数字のみ抽出

sample.py
import re

dt = ['regnkrnfskrngkaer', 'gksgnkq', 'laergnnktgar', 'erfkl', '登録者数 400人', 'aelrkna erglknnarg']
dt_str = ",".join(dt)
dt_num = re.sub("\\D", "", dt_str)
print(dt_num)

# 出力結果
# 400

文字列と数字が混じったリストから特定の数字のみ抽出

失敗例

sample.py
import re

dt = ['regr111kaer', 'gg443nkq', 'laen56nktgar', 'er39fkl', '登録者数 400人', 'ael09narg']
dt_str = ",".join(dt)
dt_num = re.sub("\\D", "", dt_str)
print(dt_num)

# 出力結果
# 111443563940009

成功例

sample.py
import re

dt = ['regr111kaer', 'gg443nkq', 'laen56nktgar', 'er39fkl', '登録者数 400人', 'ael09narg']
dt_pop = (dt.pop(4))
dt_num = re.sub("\\D", "", dt_pop)
print(dt_num)

# 出力結果
# 400

参考
https://qiita.com/ikanamazu/items/ba2a32a1a5924f3bd8e9
https://niwakomablog.com/python-number-extract/#:~:text=%E3%80%8Cr%E2%80%9D%5CD%E2%80%9D%E3%80%8D,%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82
https://qiita.com/sakamossan/items/161db7418ade037f6f3d