\ 2正则表达式中的均值

时间:2018-10-02 18:25:55

标签: python regex

据我了解,\ 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在正则表达式中到底是什么意思,我的理解在哪里错了。

1 个答案:

答案 0 :(得分:0)

这是第二个捕获组的“ 引用”。因此,这意味着重复了第二个捕获组中的内容。

例如,使用此正则表达式,'finally''finallyy'匹配为:

(\w*) (\w) \2    <rest>
fina   l   l     y
finall y   y

由于 Kleene星很贪婪,它通常会吃掉尽可能多的字符,但仍然与字符串匹配。

因此,简而言之,如果第二个捕获组将匹配foo,那么\2也必须能够匹配foo

严格来说,这样的构造并非总是 正则表达式(至少不是严格意义上的数学意义):正则表达式只能匹配常规语言,而常规语言应为可以由有限状态机解析。例如,如果第二组可以匹配任意数量的字符(例如,(\w+)\1),那么就不能在有限状态机上对此进行编码。