我创建了一个正则表达式:
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
吗?
答案 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']