假设我在字典中有此条目:
'Michaele Frendu': ['Micheli Frendu', 'Michael', 'Michaele']
意味着对于列表中值的每个实例,都必须用键替换它。
即:
如果我有此示例输入:
s = 'concessit et assignavit Micheli Frendu presenti viridarium'
这将被替换为:
s = 'concessit et assignavit Michaele Frendu presenti viridarium'
问题是当我的文字中已经有一个Michaele Frendu,而Michaele也是ex列表中的一个项目时:
s = 'Pro Michaele Frendu contra Lucam Zamit'
这将更改为:
s = 'Pro Michaele Frendu Frendu contra Lucam Zamit'
我想要的输出是:
s = 'Pro Michaele Frendu contra Lucam Zamit'
在这种情况下,我不需要任何替换,因为该值已经等于键。
我正在使用此正则表达式模式,但不起作用:
my_regex = r"\b(?=\w)" + re.escape(l) + r"\b(?!\w)"
s = re.sub(my_regex, k, s)
其中k是键,l是列表中的值
答案 0 :(得分:1)
您可以简单地将替换项放在正则表达式替换列表的第一行中,这样它将以自己替换替换项,其优先级高于替代关键字:
import re
d = {'Michaele Frendu': ['Micheli Frendu', 'Michael', 'Michaele']}
s = 'Pro Michaele Frendu contra Lucam Zamit'
for k, v in d.items():
print(re.sub('|'.join(map(re.escape, (k, *v))), k, s))
这将输出:
Pro Michaele Frendu contra Lucam Zamit
使用s = 'concessit et assignavit Micheli Frendu presenti viridarium'
,将输出:
concessit et assignavit Michaele Frendu presenti viridarium
为清楚起见,请注意'|'.join(map(re.escape, (k, *v)))
在迭代过程中返回以下内容:
Michaele\ Frendu|Micheli\ Frendu|Michael|Michaele