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

Cor*_*ith 3 python regex

以下代码很奇怪:

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

()操作似乎与较差的findall行为.为什么是这样?我需要它为csv文件.

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

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

Eri*_*ric 7

一个角色:

>>> print re.search(r'(\s)\w+', words).groups()
(' ',)
>>> print re.search(r'(\s)\w+', words).group(1)
' '
Run Code Online (Sandbox Code Playgroud)

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

>>> print re.findall(r'\s\w+', words)
[' blahblah']
Run Code Online (Sandbox Code Playgroud)

使用该csv模块


And*_*ark 5

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

[m.group() for m in re.finditer(r'(\s)\w+', words)]
Run Code Online (Sandbox Code Playgroud)

例如:

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