假设我有一个字符串 s =“如果我们得到0x12到0x34正确答案,我们就是'团队'的'冠军'”
我想获得一个列表['冠军','团队','0x12','0x34']
以下是我的尝试:
k = re.findall(r'(\'\w+\')|(0x\w+)',s)
但是我得到了这个
[("'Champion'", ''), ('', '0x12'), ('', '0x34')]
如何修复代码?
答案 0 :(得分: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')