使用正则表达式展开文本缩写失败,求可行解决方案
问题分析与解决方案
你的缩写替换失败的核心原因是Python字符串的转义处理问题,加上缺少精准匹配的边界限制,导致正则无法正确识别目标缩写。
具体问题点
你定义的字典键"kl\."在Python中会被自动解析为"kl."(因为反斜杠是转义字符,\.会被简化为.),这使得正则表达式实际匹配的是kl加上任意字符(正则中.是通配符),而非你想要的字面kl.。
修正步骤
1. 正确定义缩写字典的键
使用原始字符串(前缀r)或者双重转义反斜杠,确保正则引擎能识别字面的.:
# 方式1:原始字符串(推荐) contractions_dict = { r"kl\.": "klokken", } # 方式2:双重转义反斜杠 contractions_dict = { "kl\\.": "klokken", }
2. 添加单词边界确保精准匹配
为了避免误匹配其他包含kl的单词(比如文本中的kløjes),可以在正则中加入单词边界\b,限定只匹配独立的kl.:
完整修正代码
import re contractions_dict = { r"kl\.": "klokken", } text = 'Gl. Syd- og Sønderjyllands Politi er måske kl. 18 kløjes landets mest aktive politikreds på Twitter med over 27.000, som følger med.' def expand_contractions(s, contractions_dict, contractions_re): def replace(match): return contractions_dict[match.group(0)] return contractions_re.sub(replace, s) # 加入单词边界的正则表达式 contractions_re = re.compile(r"\b(%s)\b" % "|".join(contractions_dict.keys())) text = expand_contractions(text, contractions_dict, contractions_re) print(text)
运行结果
执行后会输出正确替换后的文本:
Gl. Syd- og Sønderjyllands Politi er måske klokken 18 kløjes landets mest aktive politikreds på Twitter med over 27.000, som følger med.
内容的提问来源于stack exchange,提问作者Kiri
相关产品推荐
相关产品推荐

