为什么当re.findall得到它时,re.search没有得到正确的组?

时间:2017-02-09 01:32:35

标签: python regex regex-greedy regex-group

给定字符串abc.的目的是将其分为两组abc.。实际上,我只对.之前的小组感兴趣。

>>> import re
>>> text = 'abc.'
>>> re.search('^(\S+)\.$', text).group(0)
'abc.'
>>> re.findall('^(\S+)\.$', text)
['abc']

为什么当re.findall得到它时,re.search没有得到正确的组?

另一个输入为abc.def.的示例,期望输出是隔离最终的完整停止并获得abc.def.。所以re.findall正在按照需要得到它:

>>> re.findall('^(\S+)\.$', text)
['abc.def']

但是re.search将最后一个完整停留在第一组中。

>>> re.search('^(\S+)\.$', text).group(0)
'abc.def.'

re.search('^(\S+)\.$', text).group(0)是否可以仅返回abc.def?是否需要设置一些标志?

2 个答案:

答案 0 :(得分:2)

组号从1开始,因此您需要group(1)group(0)是整个匹配文字。

答案 1 :(得分:2)

因为你要求错误的群体。组0是整个匹配,包括点。第1组是比赛中的第一个捕获组。这些都在match对象的文档中详细说明,re.search返回。如果您绝对需要从零开始的内容,请使用re.search(...).groups()[0]