Pythonの正規表現における非キャプチャ括弧
括弧( )には2つの機能があります -
文字のグループ化とキャプチャ(記憶)機能です。
では、グループ化はしたいがキャプチャはしたくない場合、
どうすればよいでしょうか?この問題を解決するために、
特別な非キャプチャ括弧 (?: )が導入されました -
これらはグループ化しますが、キャプチャしません。
例
次の例では、最初の括弧はグループ化のため、 2番目の括弧はキャプチャのために必要です。 しかし、どちらの括弧もデータをキャプチャしてしまいます:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
結果、キャプチャグループには以下の内容が格納されます:
print(res[0]) # 'abab123' を出力
print(res[1]) # 'ab' を出力
print(res[2]) # '123' を出力
例
最初の括弧ペアがグループ化のみを行い、 キャプチャしないように変更してみましょう:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
結果、最初のキャプチャグループには数字が格納されます:
print(res[1]) # '123' を出力