5

下面的代码很奇怪:

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

()操作员似乎对 findall 表现不佳。为什么是这样?我需要一个 csv 文件。

为清楚起见进行编辑:我想blahblah使用 findall 显示。

我发现它re.findall(r'\s(\w+)', words)可以满足我的要求,但不知道为什么 findall 会以这种方式对待组。

4

2 回答 2

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模块

于 2012-12-14T23:16:32.370 回答
6

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

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

例如:

>>> [m.group() for m in re.finditer(r'(\s)\w+', '4324324 blahblah')]
[' blahblah']
于 2012-12-14T23:59:13.697 回答