Python-如何使用正则表达式查找多个单词并同时提取它们

时间:2019-01-25 04:09:02

标签: python regex

我想使用正则表达式查找句子中的所有匹配词,并同时提取匹配词中所需的部分。

我使用来自“ re”模块的API“ findall”查找匹配词,并加上方括号以提取我想要的部分。

例如,我有一个字符串“ 0xQQ1A,0xWW2B,0xEE3C,0xQQ4C”。 我只需要在“ 0xQQ”或“ 0xWW”之后的其余两个单词,它们将产生一个列表[“ 1A”,“ 2B,” 4C“]。

这是我的代码:

import re

MyString = "0xQQ1A, 0xWW2B, 0xEE3C, 0xQQ4C"
MySearch = re.compile("0xQQ(\w{2})|0xWW(\w{2})")
MyList = MySearch.findall(MyString)

print MyList 

所以我的预期结果是[“ 1A”,“ 2B,” 4C“]。 但是实际结果是[('1A',''),('','2B'),('4C','')]

我想我可能已经使用过“()”和“ |”的组合以错误的方式。 感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

两个不同的捕获组将在输出中产生两项(每项都匹配)。

相反,使用单个捕获组并将您的|(OR)放在前面:

re.compile("0x(?:QQ|WW)(\w{2})")

({(?:...)是与...匹配的非捕获组-用于将|的影响限制为仅QQ / WW拆分,而不向输出添加其他捕获。)

答案 1 :(得分:1)

您可以尝试以下方法:

import re

string = "0xQQ1A, 0xWW2B, 0xEE3C, 0xQQ4C"
pattern = re.compile(r"(0xQQ|0xWW)(\w{2})")

result = [match[2] for match in pattern.finditer(string)]

result将是:

['1A', '2B', '4C']