Python如何使用regex查找多个单词并同时提取它们

2024-10-05 15:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

使用正则表达式,我想找到一个句子中的所有匹配词,同时提取匹配词中需要的部分。你知道吗

我使用“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','''','','','',''','',''',''')]

我想我可能用错了“()”和“|”的组合。 谢谢你的帮助!你知道吗


Tags: 模块字符串importreapi密码列表单词
2条回答

你可以试试这个:

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

两个不同的捕获组将在输出中产生两个项目(每个匹配的项目)。你知道吗

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

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

(?:...)是一个与...匹配的非捕获组-用于将|的效果限制为仅QQ/WW拆分,而不向输出中添加另一个捕获。)

相关问题 更多 >