なんだかGoodVibes

日々の勉強メモです。

【Python】正規表現によるマッチング

こんにちは。
本日はPythonメモです。

サンプルコード

以下の例は文字列の中から日付を取得します。

import re

regex = re.compile(r'\d\d\d\d/\d\d/\d\d')
mo = regex.search('今日は2023/05/01です')
print('年月日 → ' + mo.group())

実行結果は以下になります。

年月日 → 2023/05/01


次は、年、月、日を別々に取得したい場合のサンプルです。
それぞれを個別に取得する場合は、正規表現を括弧でくくります。
group()に引数に正規表現の番目を指定することで、
その正規表現に一致したものを取得します。
group()の引数を0もしくはなしにすることで全体を取得します。

import re

regex = re.compile(r'(\d\d\d\d)/(\d\d)/(\d\d)')
mo = regex.search('今日は2023/05/01です')
print('年 → ' + mo.group(1))
print('月 → ' + mo.group(2))
print('日 → ' + mo.group(3))
print('年月日 → ' + mo.group(0))
print('年月日 → ' + mo2.group())

実行結果は以下です。

年 → 2023
月 → 05
日 → 01
年月日 → 2023/05/01
年月日 → 2023/05/01


次に、ターゲットが複数存在する場合です。
その場合は、group()ではなくfindallを使用します。

regex = re.compile(r'(\d\d\d\d)/(\d\d)/(\d\d)')
mo = regex.search('休日は2023/05/03, 2023/05/04, 2023/05/05です。')
print(mo.group())

l = regex.findall('休日は2023/05/03, 2023/05/04, 2023/05/05です。')
print(l)

実行結果は以下です。

2023/05/03
  → group()の場合、最初にマッチしたもののみが取得される

[('2023', '05', '03'), ('2023', '05', '04'), ('2023', '05', '05')]
  → マッチしたものがすべて取得できる



以上です。