Python正则替换异常:点号误匹配字符问题排查与解决
问题分析与解决
异常原因
你写的代码启用了regex=True,而正则表达式里的.是特殊匹配符,能匹配任意单个字符,不是字面意义上的点。所以你的'M. '会匹配所有M + 任意字符 + 空格的组合:
- 比如"M. BOULMÉ Jean"里的"MÉ "(M+É+空格)被匹配替换,导致结果变成"BOULJean"
- "Mme BONO-VANDORME Anne"里的"ME "(M+E+空格)被匹配替换,导致结果变成"Mme BONO-VANDORAnne"
这就是点号和字母E(或带重音的É)出现混淆的核心原因——正则把E/É当成了.能匹配的任意字符。
修正代码
有两种可靠的解决方式:
方式1:关闭正则模式
让str.replace按字面量匹配,无需正则解析:
df['name'] = df['name'].str.replace('M. ', "", regex=False)
方式2:转义正则里的点号
如果需要保留正则模式(比如后续要扩展匹配规则),把点号转义为字面量,用原始字符串更简洁:
df['name'] = df['name'].str.replace(r'M\. ', "", regex=True)
如果只想替换字符串开头的"M. "(避免字符串中间的"M. "被误替换),可以添加行首锚定符^:
df['name'] = df['name'].str.replace(r'^M\. ', "", regex=True)
内容的提问来源于stack exchange,提问作者MG Fern
相关产品推荐
相关产品推荐

