1

正規表現を使用して文字列のリストに一致させたい: 1a, 2aa, 3aaa... 文字列の最初の数字は、その数字に続く a の数を示します。

本能的に、後方参照が役立つかもしれないと思いますが、それは真実ではありません。

正規表現では、後方参照を使用して、以前にキャプチャしたサブパターンと一致させることができます。たとえば、(.+) \1に一致しaaa aaaます。

パターンが一致した回数{n}{n,m}またはで後方参照を使用できますか{n,}?

たとえば、\da{\1}理想的には に一致3aaaしますが、これを python building modulereでテストしましたが、機能しません。\da{\1}コンパイラは別のリテラルとして理解しているようです:

>>> re.compile('\da{\1}', re.DEBUG)
in
  category category_digit`
literal 97
literal 123
literal 1
literal 125
<_sre.SRE_Pattern object at 0xb7726790>

>>> re.compile('\da{1}', re.DEBUG)`
in
  category category_digit
max_repeat 1 1
  literal 97
<_sre.SRE_Pattern object at 0xb7707820>

この機能はモジュールによって実装されていませんか、それとも単にこの機能が基本的な正規表現アルゴリズムでサポートされていないためですか?

4

1 に答える 1

0

面白いアイデアですが、正規表現のコンパイル時に「{n}」が処理されると思います。

次のようなことができます。

>>> import re
>>> text = '3aaa'
>>> m = re.search('(\d+)a', text)
>>> pat = '\d+a{%s}' % m.group(1)
>>> n = re.search(pat, text)
>>> n.group(0)
'3aaa'

「3aaaaa」のようなパターンを除外したい場合は、パターンの最後に「\b」が必要です (Python では「\b」と入力します)。

pat = '\d+a{%s}\\b' % m.group(1)
于 2012-11-21T22:30:32.123 に答える