我从教科书中读到并学习了#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"。我完全失去了......
有人可以详细解释这些吗?感谢。
答案 0 :(得分:1)
这是因为你匹配一个单词(后跟一个空格),然后是第1组中的相同匹配。因为in in
是顺序中同一个单词的第一个(也是唯一的序列),所以火柴。
例如,如果您有Cherry tree tree [...]
,则您的匹配将为tree tree
。
这只是找到一个单词后跟一个空格。由于Cherry
是第一个单词,因此匹配。
m.group(1)
返回“in”?使用re.search
,m.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
。