re.search()和re.findall()之间的区别

时间:2012-12-14 23:13:53

标签: python regex

以下代码非常奇怪:

 >>> words = "4324324 blahblah"
 >>> print re.findall(r'(\s)\w+', words)
 [' ']
 >>> print re.search(r'(\s)\w+', words).group()
 blahblah

()运算符似乎与findall表现不佳。为什么是这样?我需要它用于csv文件。

为清晰起见编辑:我想使用findall显示blahblah

我发现re.findall(r'\s(\w+)', words)做了我想做的事,但不知道为什么findall以这种方式对待团体。

2 个答案:

答案 0 :(得分:7)

关闭一个角色:

>>> print re.search(r'(\s)\w+', words).groups()
(' ',)
>>> print re.search(r'(\s)\w+', words).group(1)
' '

findall返回捕获的所有组的列表。你得到一个空间,因为这是你捕获的。停止捕获,它工作正常:

>>> print re.findall(r'\s\w+', words)
[' blahblah']

使用csv模块

答案 1 :(得分:5)

如果您希望将捕获组保留在正则表达式中,但仍希望找到每个匹配的全部内容而不是组,则可以使用以下内容:

[m.group() for m in re.finditer(r'(\s)\w+', words)]

例如:

>>> [m.group() for m in re.finditer(r'(\s)\w+', '4324324 blahblah')]
[' blahblah']