Python如何实现字典替换文本且跳过skip_words列表中的指定词汇
实现思路
- 采用正则匹配+回调函数的方案处理,优先匹配长词汇避免短词拆分长词的问题
- 匹配逻辑优先命中skip_words列表中的词汇,命中后直接返回原内容不做替换
- 未命中skip_words的内容如果匹配替换字典的key,返回对应替换值
完整实现代码
import re my_text = "HelloWorld foobar Hello bar..." my_dict = { "Hello": "Hi", "bar": "rab" } skip_words = ["HelloWorld", "foobar"] # 收集所有待匹配项,按长度降序排序保证长词优先匹配 all_patterns = skip_words + list(my_dict.keys()) all_patterns.sort(key=lambda x: len(x), reverse=True) # 转义特殊字符,构建正则模式 pattern = re.compile('|'.join(re.escape(word) for word in all_patterns)) def replace_match(match): matched_text = match.group() # 匹配到跳过词直接返回 if matched_text in skip_words: return matched_text # 匹配到替换key返回对应值 return my_dict.get(matched_text, matched_text) # 执行替换 my_text = pattern.sub(replace_match, my_text) print(my_text)
运行输出结果为:HelloWorld foobar Hi rab...,完全符合预期要求。
代码说明
- 对所有待匹配的词汇(skip_words + 替换字典key)做长度降序排序,保证长词优先匹配,不会出现长词被拆分为短key误替换的问题
- 使用
re.escape处理每个待匹配词汇,规避特殊正则元字符(比如*、.、?)导致的匹配异常 - 回调函数中仅对非跳过列表的匹配key做替换,其他内容原封不动返回
内容的提问来源于stack exchange,提问作者OAO
相关产品推荐
相关产品推荐

