from re import match
pattern = r"(.+) \2" #Change "\1" to "\2" and Error raised
match = match(pattern, "q q")
if match:
raise source.error("invalid group reference %d" % group, len(escape) - 1)
sre_constants.error:位置6处的组引用2无效
这是来自官方文档,但我不明白其含义。我尝试了/ 1和/ 2。对于/ 1,可以。对于/ 2,发生了错误。
“ \数字 匹配相同编号组的内容。 “
答案 0 :(得分:4)
每组括号是一个捕获组。您仅捕获了一个可以反向引用为\1
的组,但是由于您没有捕获第二个组,因此反向引用\2
失败了。
在this page上,请参阅“捕获组”和“后向引用”。
另一个用于正则表达式的有用工具是Regex101,它不仅可以测试正则表达式,还可以解释其功能。我将您未修改的正则表达式放在这里:https://regex101.com/r/LfJ65s/1/
我在https://regex101.com/r/LfJ65s/2
提出了另一个您可能也感兴趣的查询这里有查询(.+) (.+) \2
和两个模式:
这是一场比赛
q r r
这不是匹配项
q r q
但是,如果将其更改为(.+) (.+) \1
,则匹配项将更改,因为我们随后询问第一组是否重复(在第二组及其之间的空格之后)。我们现在可以引用\2
,因为现在有两个捕获组。
顺便说一句,查询(.+) \1
基本上会问,是否有一些字符以相同的方式重复,并且它们之间有一个空格。匹配为:
Wow Wow
q q
123 123
___ ___
2;3j34kl+++___ 2;3j34kl+++___
而且,即使连续三个空格也将与匹配,因为空格字符之间会以空格重复。