以下代码非常奇怪:
>>> 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以这种方式对待团体。
答案 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']