正規表現(1)に続いてPython正規表現についてです。
ここではグループに関する正規表現を整理します。
groupとは
groupとは()で囲まれた正規表現のことを表します。
以下は一見すると結果を見ると同じに見えます。
import re # グループを使ってない re.match("aba","ababaaab").group() # 'aba' # グループを使っている re.match("(ab)(a)","ababaaab").group() # 'aba'
後者はabとaを()でそれぞれくくり、別のグループとしています。
このようにすると、.groups()
でタプルに分割して返すことが可能になります。
また、.group(index)
を用いると、それぞれにアクセスが可能になります。
import re # グループを使っていない re.match("aba","ababaaab").groups() # () # グループを使っている re.match("(ab)(a)","ababaaab").groups() # ('ab','a') re.match("(ab)(a)","ababaaab").group(2) # 'a'
グループの拡張記法
グループは(?拡張記法+正規表現)
とすることで
より高度な機能を使うことが出来ます。
名付け機能
# <名前>で名前を付けられる re.match("(?<first>ab)(?<second>a)","ababaaab").group('second') # 'a' # groupdictで辞書にして取り出せる re.match("(?<first>ab)(?<second>a)","ababaaab").groupgroup() # {"first":"ab","second":"a"}
その他マッチの拡張
# = で先読みアサーション re.match("ab(?=a)","ababaaab").group() # 'ab':aはマッチの条件になるが、返り値には入らない # <= で後読みアサーション re.search("(?<=a)bab","ababaaab").group() # 'bab':aはマッチの条件になるが、返り値には入らない # <!で否定後読みアサーション re.search("(?<\!a)bab","ababaaab").group() # None