python:正規表現のグループ化
正規表現のグルーピングで少し分かりにいところがあったからメモ
コード
import re text = '12cd efg12121 bc121212d efg1212' terget_1 = r'(12)+\w*' result = re.findall(terget_1, text) print(result_1) terget = r'(?:12)+\w*' result_2 = re.findall(terget_2, text) print(result_2)
出力
['12', '12', '12', '12'] ['12cd', '1212', '121212d', '1212']
括弧の主な役割は、(12)+
で12
の一回以上の繰り返しに一致する、とか
括弧( )
は正規表現をまとめて構造化できるけど、そのままだと一致結果を抜き出すときに括弧内の文字だけを集めてきてしまう(一つ目の結果)。検索したい文字列のさらに特定の部分だけ取り出したいときは便利だけど、そうじゃなくて単に正規表現を書くときにグループを作りたいだけなら(?:12)
などのよう?:
をつける。これで出力するときに括弧が影響を与えない。