据我了解,\ 2代表第2组的内容。
因此,表达式r'(\w*)(\w)\2'
应该返回group2的内容(即\w
)
但是当我们使用具有重复字符的单词时,它返回的是重复字符。
例如:
re.search(r'(\w*)(\w)\2','finally').group(2) -> 'l'
re.search(r'(\w*)(\w)\2','finallyy').group(2) ->'y'
在第一个示例中,输出为'l'而不是'y'。
任何人都可以告诉我\ 2在正则表达式中到底是什么意思,我的理解在哪里错了。
答案 0 :(得分:0)
这是第二个捕获组的“ 引用”。因此,这意味着重复了第二个捕获组中的内容。
例如,使用此正则表达式,'finally'
和'finallyy'
匹配为:
(\w*) (\w) \2 <rest>
fina l l y
finall y y
由于 Kleene星很贪婪,它通常会吃掉尽可能多的字符,但仍然与字符串匹配。
因此,简而言之,如果第二个捕获组将匹配foo
,那么\2
也必须能够匹配foo
。
严格来说,这样的构造并非总是 正则表达式(至少不是严格意义上的数学意义):正则表达式只能匹配常规语言,而常规语言应为可以由有限状态机解析。例如,如果第二组可以匹配任意数量的字符(例如,(\w+)\1
),那么就不能在有限状态机上对此进行编码。