2 回答

TA贡献1878条经验 获得超4个赞
您可以动态构建模式,以在组名称中包含您搜索的单词的索引,然后获取与以下各项匹配的模式部分:
import re
words = ["ERP", "Gap"]
words_dict = { f'g{i}':item for i,item in enumerate(words) }
rx = rf"\b(?:{'|'.join([ rf'(?P<g{i}>{item})' for i,item in enumerate(words) ])})\b"
text = 'ERP is integral part of GAP, so erp can never be ignored, ErP!'
results = []
for match in re.finditer(rx, text, flags=re.IGNORECASE):
results.append( [words_dict.get(key) for key,value in match.groupdict().items() if value][0] )
print(results) # => ['ERP', 'Gap', 'ERP', 'ERP']
在线观看 Python 演示
该模式将如下所示:\b(?:(?P<g0>ERP)|(?P<g1>Gap))\b
\b
- 一个单词边界(?:
- 非捕获组封装图案部件的开始:(?P<g0>ERP)
- 组“g0”:ERP
|
- 或(?P<g1>Gap)
- 组“g1”:Gap
)
- 组的结束\b
- 一个单词边界。
请参阅正则表达式演示。
注意 with 将适用于所有情况,因为当有匹配项时,只有一个组匹配。[0]
[words_dict.get(key) for key,value in match.groupdict().items() if value][0]

TA贡献1809条经验 获得超8个赞
请参阅上面的评论。尝试:
>>> [x.upper() for x in r.findall(string)] ['ERP', 'GAP', 'ERP', 'ERP'] >>>
或
>>> map(lambda x: x.upper(), r.findall(string)) ['ERP', 'GAP', 'ERP', 'ERP']>>>
添加回答
举报