正则表达式:在匹配时间{n}中使用反向引用?

时间:2012-10-16 03:14:58

标签: python regex backreference

我想使用正则表达式匹配字符串列表:1a2aa3aaa ...其中字符串中的第一个数字表示跟随的字符串数量数字。

本能地认为反向引用可能会有所帮助,但事实并非如此。

在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>

此功能是否未由模块实现,或仅仅因为基本正则表达式算法不支持此功能?

1 个答案:

答案 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)