Python正規表現における中括弧
演算子'+'、'*'、'?'は便利ですが、特定の繰り返し回数を指定することはできません。この場合、演算子{}が役立ちます。
その動作は次のとおりです:{5}は5回の繰り返し、{2,5}は2回から5回(両端を含む)の繰り返し、{2,}は2回以上の繰り返しです。例を見てみましょう:
例
この例では、検索パターンは次のようになります:文字'x'、文字'a'が1回または2回、文字'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{1,2}x', '!', txt)
print(res)
コードの実行結果:
'xx ! ! xaaax'
例
この例では、検索パターンは次のようになります:文字'x'、文字'a'が2回以上、文字'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{2,}x', '!', txt)
print(res)
コードの実行結果:
'xx xax ! !'
例
この例では、検索パターンは次のようになります:文字'x'、文字'a'が3回、文字'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{3}x', '!', txt)
print(res)
コードの実行結果:
'xx xax xaax !'
例
この例では、検索パターンは次のようになります:文字'a'が10回:
txt = 'aaa aaaaaaaaaa aaa'
res = re.sub('a{10}', '!', txt)
print(res)
コードの実行結果:
'aaa ! aaa'
例
この例には次のようなパターンがあります:文字'x'、文字'a'が3回以下、文字'x'。これを実現するには、数字3の前に数を指定せず、単にカンマを置くことができます:
txt = 'xx xax xaax xaaax'
res = re.sub('xa{,3}x', '!', txt)
print(res)
コードの実行結果:
'! ! ! !'
例
3の前のゼロも有効です:
txt = 'xx xax xaax xaaax'
res = re.sub('xa{0,3}x', '!', txt)
print(res)
コードの実行結果:
'! ! ! !'
実践問題
次の文字列があります:
txt = 'aa aba abba abbba abbbba abbbbba'
文字列'abba'、'abbba'、'abbbba'のみを見つける正規表現を書いてください。
次の文字列があります:
txt = 'aa aba abba abbba abbbba abbbbba'
'b'が3回以下(含む)出現する'aba'の形式の文字列を見つける正規表現を書いてください。
次の文字列があります:
txt = 'aa aba abba abbba abbbba abbbbba'
'b'が4回以上(含む)出現する'aba'の形式の文字列を見つける正規表現を書いてください。