Pythonにおける正規表現の具体的な使用例について、紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- 日付を抽出する方法
- 電話番号を抽出する方法
- メールアドレスを抽出する方法
- URLを抽出する方法
なお、本記事で紹介しているパターンが万能というわけではありません。
例えば、電話番号の記述方法には、以下のような種類あり、すべての記述方法を網羅できていない可能性もあります。
03-1234-5678
0120-12-3456
(03)1234-5678
あくまで、正規表現の具体的な使用方法をイメージするための例題として、参考にして頂ければと思います。
また、以下の記事で、正規表現の基本的な使用方法についてもまとめているので、併せて参考にしてみてください。
【Python】正規表現の基本的な使用方法【reモジュール】
なお、本記事では、例題として下記の文字列を使用します。
s = 'ページ番号:123 更新日:2022年2月21日' + '\n' + \
'○○区役所庁舎案内' + '\n' + \
'お問い合わせは、庁舎管理係へお願いします'+ '\n' + \
'電話:03-1234-5566(代表)'+ '\n' + \
'メールアドレス:abc123def-456ghi@domain.ne.jp' + '\n' + \
'特設サイト:https://www.city.xxx.tokyo.jp/toiawase/'
スポンサーリンク
正規表現で日付を抽出
はじめに、正規表現で日付を抽出する方法を紹介します。
正規表現で日付を抽出するための、基本的なパターンは以下になります。
パターン例
◆YYYY年MM月DD日 の場合
\d{4}年\d{1,2}月\d{1,2}日
◆YYYY/MM/DD の場合
\d{4}/\d{1,2}/\d{1,2}
◆上記どちらにも対応する場合
\d{4}[年/]\d{1,2}[月/]\d{1,2}日?
簡単にパターンの解説をすると・・・
\d{4} : 数字を4回繰り返し
[年/] : 年、/ の集合
\d{1,2} : 数字を1~2回繰り返し
日? : 日 を、0または1回
上記の組合せになっています。
以下、サンプルコードです。
import re
pattern = r'\d{4}[年/]\d{1,2}[月/]\d{1,2}日?'
res = re.findall(pattern, s)
print(res)
# ['2022年2月21日']
日付を抽出することができています。
同じパターンで、YYYY/MM/DDの日付も抽出できます。
import re
test = 'ページ番号:123 更新日:2022/11/20'
pattern = r'\d{4}[年/]\d{1,2}[月/]\d{1,2}日?'
res = re.findall(pattern, test)
print(res)
# ['2022/11/20']
スポンサーリンク
正規表現で電話番号を抽出
正規表現で、電話番号を抽出する方法について、紹介します。
電話番号についても、様々な記述方法があります。以下一例です。
03-1234-5678
090-1234-5678
0120-12-3456
0120-123-456
(03)1234-5678
正規表現で電話番号を抽出するための、基本的なパターンは以下になります。
パターン例
[(]?\d{2,4}[-)]?\d{2,4}-\d{3,4}
簡単にパターンの解説をすると・・・
[(]? : (を、0または1回繰り返し
\d{2,4} : 数字を2~4回繰り返し
[-)]? : -または)を、0または1回
以下、サンプルコードです。
import re
pattern = r'[(]?\d{2,4}[-)]?\d{2,4}-\d{3,4}'
res = re.findall(pattern, s)
print(res)
# ['03-1234-5566']
電話番号を抽出することができています。
同じパターンで、前述の5つの電話番号は検出できます。
また、最後のハイフンがあることで、数字だけの羅列を電話番号として誤って抽出することを防ぐことができます。
import re
test = '電話番号の例1 : 03-1234-5678' + '\n' + \
'電話番号の例2 : 090-1234-5678' + '\n' + \
'電話番号の例3 : 0120-12-3456' + '\n' + \
'電話番号の例4 : 0120-123-456' + '\n' + \
'電話番号の例5 : (03)1234-5678' + '\n' + \
'電話番号ではない: 0312345678'
pattern = r'[(]?\d{2,4}[-)]?\d{2,4}-\d{3,4}'
res = re.findall(pattern, test)
print(res)
# ['03-1234-5678', '090-1234-5678', '0120-12-3456', '0120-123-456', '(03)1234-5678']
スポンサーリンク
正規表現でメールアドレスを抽出
正規表現で、メールアドレスを抽出する方法について、紹介します。
正規表現でメールアドレスを抽出するための、基本的なパターンは以下になります。
パターン例
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
簡単にパターンの解説をすると・・・
[a-zA-Z0-9_.+-]+ : アルファベット(a~z、A~Z)、記号(_.+-)、数字(0~9)を1回以上繰り返し
\. : エスケープさせて、ドットを文字列としてマッチさせている。(正規表現だと、ドットは任意の一文字になってしまう)
以下、サンプルコードです。
import re
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
res = re.findall(pattern, s)
print(res)
# ['abc123def-456ghi@domain.ne.jp']
スポンサーリンク
正規表現でURLを抽出
正規表現で、URLを抽出する方法について、紹介します。
正規表現でURLを抽出するための、基本的なパターンは以下になります。
パターン例
https?://[\w/:%#\$&\?\(\)~\.=\+\-]+
簡単にパターンの解説をすると・・・
https? : httpまたはhttps (sは0回または1回繰り返し)
[\w/:%#\$&\?\(\)~\.=\+\-]+
⇒\w : 任意の英数字。[a-zA-Z0-9_]と同じ意味。
⇒その他の記号は、正規表現で役割を持っている場合は、\バックスラッシュでエスケープさせて文字列として扱っている。
以下、サンプルコードです。
import re
pattern = r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+'
res = re.findall(pattern, s)
print(res)
# ['https://www.city.xxx.tokyo.jp/toiawase/']
正規表現に関しては、他にも使用方法をまとめています。併せて参考にしてみてください。
【Python】正規表現の基本的な使用方法【reモジュール】
【Python】正規表現の特殊シーケンスについて【バックスラッシュ、円マーク】
【Python】reモジュールのcompile関数の使い方
【Python】正規表現の貪欲・非貪欲マッチ
スポンサーリンク