假设我有一根绳子
s=“如果得到0x12到0x34的正确答案,我们就是‘团队’的‘冠军’”
我想要一个列表[“冠军”,“球队”,“0x12”,“0x34”]
以下是我尝试过的:

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

但是我得到了这个
[("'Champion'", ''), ('', '0x12'), ('', '0x34')]

如何修复代码?

最佳答案

这是因为(...)是一个capturing group,它使match返回一个元组,其中包含与(...)之间的子regex匹配的字符串。
您可以使用(?:...)来代替您的组不捕获。或者在这种情况下,您可以完全删除括号。

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')

10-04 19:17