我正在尝试将正则表达式的一部分作为后续正则表达式的输入。
目前我所拥有的(未能通过断言):
import re
regex = re.compile(r"(?P<length>\d+)(\d){(?P=length)}")
assert bool(regex.match("3123")) is True
assert bool(regex.match("100123456789")) is True
将这个问题分解开来,前面的数字表示后面有多少位数字需要匹配。在第一个表达式中,我得到了一个 3
,作为第一个字符,这意味着在此之后应该恰好有三位数字,否则就超过了9位数字。如果超过了9位数字,那么第一组将需要扩展并与其余数字进行匹配。
正则表达式3(\d){3}
可以正确地匹配第一个断言,但我无法使正则表达式匹配使用了大括号{}
传递回溯引用的一般情况:{(?P=length)}
通过使用re.DEBUG
标志调用正则表达式,我得到如下结果:
subpattern 1
max_repeat 1 4294967295
in
category category_digit
subpattern 2
in
category category_digit
literal 123
groupref 1
literal 125
似乎花括号
{
(123
) 和 }
(125
) 在其中存在反向引用时被解释为文字。当不存在反向引用时,例如 {3}
,我可以看到 {3}
被解释为 max_repeat 3 3
。在正则表达式中使用反向引用是否可行?