为什么re.groups()不会为我的正确匹配组提供任何东西?

dtc*_*dtc 32 python regex object match capture-group

当我运行此代码时:

print re.search(r'1', '1').groups() 
Run Code Online (Sandbox Code Playgroud)

我得到了结果().但是,.group(0)给我一个匹配.

不应该groups()给我一些包含比赛的东西?

更新:感谢您的回答.因此,这意味着,如果我这样做re.search(),没有分组,我必须使用groups(0)获得比赛?

Hod*_*Hod 23

据我所知,.groups()返回一组记忆组.即正则表达式中括在括号中的那些组.所以如果你写的话:

print re.search(r'(1)', '1').groups()
Run Code Online (Sandbox Code Playgroud)

你会得到的

('1',)
Run Code Online (Sandbox Code Playgroud)

作为你的回应.通常,.groups()将返回正则表达式中括在括号内的所有对象组的元组.


aru*_*mar 22

由于您没有任何捕获组,因此组是空的 - http://docs.python.org/library/re.html#re.MatchObject.groups.group(0)将始终返回匹配的整个文本,无论它是否在组中捕获

编辑.


ovg*_*vin 5

这样做的原因是您没有捕获组(因为您没有()在模式中使用)。 http://docs.python.org/library/re.html#re.MatchObject.groups

group(0)返回整个搜索结果(即使它根本没有捕获组):http : //docs.python.org/library/re.html#re.MatchObject.group


ste*_*ema 5

您的正则表达式中没有组,因此()结果是一个空列表()。

尝试

re.search(r'(1)', '1').groups()
Run Code Online (Sandbox Code Playgroud)

使用括号将您创建一个捕获组,将与模式的这一部分匹配的结果存储在一个组中。

然后你得到

('1',)
Run Code Online (Sandbox Code Playgroud)

结果。