如何用Python正则表达式移除称谓前缀的点而非句末点?
解决方案
直接用精准匹配称谓前缀的正则表达式,只替换Mr.和Mrs.里的点号,不会影响句子末尾的点:
import re text = "Mr. and Mrs. Jackson live up the street from us. However, Mrs. Jackson's son lives in the street parallel to us." result = re.sub(r'\b(Mr|Mrs)\.', r'\1', text) print(result)
运行结果:
Mr and Mrs Jackson live up the street from us. However, Mrs Jackson's son lives in the street parallel to us.
为什么你的代码不行?
你之前用的re.sub('\.(?!$)', '', text)会移除所有不在句子末尾的点号,范围太宽泛——如果文本里还有其他非称谓的缩写点号(比如Dr.、etc.)也会被误删。而上面的正则通过\b(Mr|Mrs)\.精准匹配称谓前缀后面的点,\b是单词边界,确保只匹配独立的Mr./Mrs.,不会误匹配其他包含这些字符的单词,然后用\1保留Mr/Mrs本身,去掉后面的点。
如果需要支持更多称谓(比如Dr.、Ms.),只需要在括号里添加对应的前缀:
result = re.sub(r'\b(Mr|Mrs|Ms|Dr)\.', r'\1', text)
内容的提问来源于stack exchange,提问作者Mana Balik
相关产品推荐
相关产品推荐

