我想使用正则表达式匹配字符串列表:1a
,2aa
,3aaa
...其中字符串中的第一个数字表示跟随的字符串数量数字。
本能地认为反向引用可能会有所帮助,但事实并非如此。
在Regex中,我们可以使用反向引用来匹配先前捕获的子模式。
例如,(.+) \1
将匹配aaa aaa
。
我可以在模式匹配时间{n}
,{n,m}
或{n,}
中使用反向引用吗?
例如,\da{\1}
理想情况下匹配3aaa
,但是,我使用python构建模块re
对其进行了测试,但它不起作用。编译器似乎将\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>
此功能是否未由模块实现,或仅仅因为基本正则表达式算法不支持此功能?
答案 0 :(得分: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)