Pythonで、スクレイピングなどで抽出したデータ(リストや文字列)から数字のみ抽出(正規表現)する方法をメモしておきます。正規表現のモジュールにはregexを使用しますので、regexをインストールしていない方はインストールしてください。
目的
スクレイピングで抽出したデータから、数字のみを抽出する
実装
正規表現を使って、数字のみ抽出
reモジュールを使用します。ターミナルから以下のコマンドを実行して、regexをインストールしましょう。
$ pip install regex
# または
$ pip3 install regex
その次に、sample.pyにreモジュールをインポート
import re
これでreモジュールを使う準備ができました。
文字列から数字のみ抽出
import re
dt = "regnkrnfskrngkaer gksgnkq laergnnktga3r erfkl 登録者数 400人aelrkna erglknnarg"
num = re.sub("\\D", "", dt)
print(num)
# 出力結果
# 400
リストから数字のみ抽出
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
文字列と数字が混じったリストから特定の数字のみ抽出
失敗例
import re
dt = ['regr111kaer', 'gg443nkq', 'laen56nktgar', 'er39fkl', '登録者数 400人', 'ael09narg']
dt_str = ",".join(dt)
dt_num = re.sub("\\D", "", dt_str)
print(dt_num)
# 出力結果
# 111443563940009
成功例
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