2 回答

TA貢獻1878條經(jīng)驗 獲得超4個贊
您可以動態(tài)構建模式,以在組名稱中包含您搜索的單詞的索引,然后獲取與以下各項匹配的模式部分:
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條經(jīng)驗 獲得超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']>>>
添加回答
舉報