python正则表达式“ \ 2”的含义是什么

时间:2018-07-05 03:39:49

标签: python regex

from re import match

pattern = r"(.+) \2" #Change "\1" to "\2" and Error raised

match = match(pattern, "q q")
if match:

打印(1)

raise source.error("invalid group reference %d" % group, len(escape) - 1)

sre_constants.error:位置6处的组引用2无效


这是来自官方文档,但我不明白其含义。我尝试了/ 1和/ 2。对于/ 1,可以。对于/ 2,发生了错误。

“ \数字     匹配相同编号组的内容。 “

1 个答案:

答案 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+++___
而且,即使连续三个空格也将与匹配,因为空格字符之间会以空格重复。