如何在文本文件中精确匹配并纠正单词,避免部分匹配误替换
问题描述
我有一个test.txt文件,里面包含两个拼写错误的单词:loyai、royai,还有正确的单词pain。我想用字典words_查找并替换这些拼写错误的单词,但当前代码会把包含pai的pain错误替换成paln。我需要实现仅精确匹配整个错误单词时才进行替换,请问该怎么修改代码?
原代码
#!/usr/bin/env python3 import re words_ = {"loyai":"loyal", "royai":"royal", "pai":"pal"} class srt_clean(object): def __init__(self, file_name): self.file_name = file_name def replace_words_(self, file_name): with open(file_name, 'r') as file: data = file.read() for search_text, replace_text in words_.items(): data = re.sub(search_text, replace_text, data) # 以写入模式打开文件,写入替换后的内容 with open(file_name, 'w') as file: file.write(data) file_name = "test.srt" clean = srt_clean(file_name) clean.replace_words_(file_name)
修改方案及代码
核心是利用正则表达式的单词边界\b,它会匹配单词字符(字母、数字、下划线)与非单词字符的分界处,或是字符串首尾与单词字符的分界处,以此确保只替换独立的目标单词。同时用re.escape()转义搜索文本中的特殊字符,避免正则语法解析错误。
修改后的代码:
#!/usr/bin/env python3 import re words_ = {"loyai":"loyal", "royai":"royal", "pai":"pal"} class srt_clean(object): def __init__(self, file_name): self.file_name = file_name def replace_words_(self, file_name): with open(file_name, 'r') as file: data = file.read() for search_text, replace_text in words_.items(): # 用单词边界包裹搜索文本,确保精确匹配整个单词 pattern = rf'\b{re.escape(search_text)}\b' data = re.sub(pattern, replace_text, data) with open(file_name, 'w') as file: file.write(data) file_name = "test.srt" clean = srt_clean(file_name) clean.replace_words_(file_name)
内容的提问来源于stack exchange,提问作者bob_the_bob
相关产品推荐
相关产品推荐

