给定字符串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
?是否需要设置一些标志?
答案 0 :(得分:2)
组号从1开始,因此您需要group(1)
。 group(0)
是整个匹配文字。
答案 1 :(得分:2)
因为你要求错误的群体。组0是整个匹配,包括点。第1组是比赛中的第一个捕获组。这些都在match
对象的文档中详细说明,re.search
返回。如果您绝对需要从零开始的内容,请使用re.search(...).groups()[0]
。