我想使用正则表达式查找句子中的所有匹配词,并同时提取匹配词中所需的部分。
我使用来自“ 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','')]
我想我可能已经使用过“()”和“ |”的组合以错误的方式。 感谢您的帮助!
答案 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']