在Python中使用findall多个模式的正则表达式

问题描述 投票:3回答:1

假设我有一个字符串s =“我们是'团队'的'冠军',如果我们得到0x12到0x34正确的答案”

我想获得一个列表['冠军','团队','0x12','0x34']

这是我尝试过的:

k = re.findall(r'(\'\w+\')|(0x\w+)',s)

但我得到了这个

[("'Champion'", ''), ('', '0x12'), ('', '0x34')]

如何修复代码?

python regex
1个回答
4
投票

这是因为(...)是一个capturing group,它使你的匹配返回一个包含与(...)之间的子正则表达式相匹配的字符串的元组。

您可以使用(?:...)代替您的组进行非捕获。或者在这种情况下,您可以完全删除括号。

re.findall(r"'[^']+'|0x\w+",s)
# ["'Champion'", "'The Team'", '0x12', '0x34']

请注意,如果您希望获得固定数量的匹配,您实际上可以使用捕获组来解决您的问题。

re.match(r".*?'([^']+)'.*?'([^']+)'.*?(0x\w+).*?(0x\w+)",s).groups()
# ("Champion", "The Team", '0x12', '0x34')
© www.soinside.com 2019 - 2024. All rights reserved.