单词替换源代码如下所示。
text ="""
abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa aaaaaaa abc3 aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa
aaaaaaa abc3 aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa aaaaaaa abc3 aaaaaaa abc1 aaaaaaa
"""
dictionary = {"abc1":"apple", "abc2":"banana", "abc3":"tomato"}
pattern = "|".join(rf"\b{x}\b" for x in dictionary.keys())
s = re.sub(pattern, lambda x: dictionary[x.group()], text)
print(s)这将替换所有元素。我想要的是字典中的每个元素只替换一次。例如,如下所示
apple aaaaaa aaaaaaaa banana aaaaaaaa aaaaaaa tomato aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa
aaaaaaa abc3 aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa aaaaaaa abc3 aaaaaaa abc1 aaaaaaa仅替换第一个元素。
发布于 2021-04-23 16:20:59
使用re.sub的第四个count参数告诉API只进行一次替换:
dictionary = {"abc1":"apple", "abc2":"banana", "abc3":"tomato"}
for key, value in dictionary.items():
text = re.sub(r'\b' + key + r'\b', value, text, 1)
print(text)这将打印:
apple aaaaaa aaaaaaaa banana aaaaaaaa aaaaaaa tomato aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa
aaaaaaa abc3 aaaaaaa abc1 aaaaaa aaaaaaaa abc2 aaaaaaaa aaaaaaa abc3 aaaaaaa abc1 aaaaaaa发布于 2021-04-23 16:23:41
您可以使用带有两个参数的dict方法.pop,请考虑下面的示例:
dictionary = {"abc1":"apple", "abc2":"banana", "abc3":"tomato"}
print(dictionary.pop("abc1", "default"))
print(dictionary.pop("abc1", "default"))
print(dictionary.pop("abc1", "default"))输出
apple
default
default在你的例子中,第二个参数应该是匹配的(作为str),所以
s = re.sub(pattern, lambda x: dictionary.pop(x.group(),x.group()), text)应该行得通
https://stackoverflow.com/questions/67226393
复制相似问题