符号\数字如何在这个例子中起作用?

时间:2016-04-12 15:42:24

标签: regex

我从教科书中读到并学习了#34; \ number"是指第n组,但在示例中我仍然无法理解。

import re
m = re.search(r'(\b\w+)\s+', 'Cherry tree blooming will begin in in later March, High Park Toronto')
print m.group(0)

我可以理解它首先返回" in",因为" in"匹配括号中的内容(\ b \ w +)。但为什么它会回归""对于m.group(1)?

然后我稍微修改了代码以删除" \ 1":

typeid()

它返回" Cherry"。我完全失去了......

有人可以详细解释这些吗?感谢。

2 个答案:

答案 0 :(得分:1)

(\ B \ W +)\ S + \ 1

这是因为你匹配一个单词(后跟一个空格),然后是第1组中的相同匹配。因为in in是顺序中同一个单词的第一个(也是唯一的序列),所以火柴。

例如,如果您有Cherry tree tree [...],则您的匹配将为tree tree

(\ B \ W +)\ S +

这只是找到一个单词后跟一个空格。由于Cherry是第一个单词,因此匹配。

但为什么它会为m.group(1)返回“in”?

使用re.searchm.group(0)保留整个匹配,m.group(1)保留第一个捕获组 - in

答案 1 :(得分:1)

在你的正则表达式(\b\w+)\s+\1中你所说的是

  

匹配一个单词(\ w +),前面是单词边界(\ b),后跟一个或多个空格(\ s +),后面跟着(\ b \ w +)捕获的相同单词。

由于您使用了捕获组,因此在第一个捕获组中捕获每个此类模式,并使用\1检查重复模式。所以第一次出现这种模式是in in

m.group(0) 包含完整匹配。而 m.group(1) 包含第一个捕获的 in 组。

当您删除\1时,您的正则表达式变为(\b\w+)\s+。让我们看看它现在在说什么。

  

匹配一个单词(\ w +),前面是单词边界(\ b),后跟一个或多个空格(\ s +)。

首次出现这种模式的是Cherry

m.group(0) 现在拥有整个匹配Cherry