以下代码很奇怪:
>>> 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以这种方式对待团体.
一个角色:
>>> 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模块
如果您希望将捕获组保留在正则表达式中,但仍希望查找每个匹配的全部内容而不是组,则可以使用以下内容:
[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)