Python中的正则表达式:(\ w)+的​​search()vs findall()

时间:2017-02-07 05:51:47

标签: python regex

我创建了一个正则表达式:

agentRegex.search('Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.').group()

然后我执行了'Agent Alice'操作:

findall()

我获得agentRegex.findall('Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') 作为输出。

但是当我执行['e', 'l', 'e', 'b']操作时:

['Alice Agent', 'Agent Carol', 'Agent Eve', 'Agent Bob']

输出为C++17

输出不应该是std::any吗?

3 个答案:

答案 0 :(得分:1)

默认情况下,

re.findall()会根据您的情况(\w+)输出已捕获的群组列表。

摆脱被捕获的群体:

Agent \w+

示例:

>>> agentRegex = re.compile(r'Agent \w+')

>>> agentRegex.findall('Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') 
['Agent Alice', 'Agent Carol', 'Agent Eve', 'Agent Bob']

答案 1 :(得分:1)

你的正则表达式:

'Agent (\w)+'

它将在\w之后继续匹配和捕获单个'Agent '字符,并将在下一个匹配时覆盖匹配的组。这就是['e', 'l', 'e', 'b'] ['Alice', 'Carol', 'Eve', 'Bob']

的最后一个字符的.search().group()

您在group()得到了正确答案,因为group(0)默认为.search().group(1),其中包含匹配的所有内容,但如果您执行['e'],则会获得const

您正在寻找的是捕获代理以及下一个字。所以,你可以尝试heemayl和Dietrich建议。

答案 2 :(得分:0)

你也可以这样做:

import re
agentRegex = re.compile(r'Agent\s+[^\s]+')
print agentRegex.findall('Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') 
# ['Agent Alice', 'Agent Carol', 'Agent Eve', 'Agent Bob']