Pandas如何精准替换DataFrame指定后缀避免字符串误匹配?
解决方案
问题原因
你当前的写法没有限定匹配位置,会替换字符串中任意位置出现的目标字符,同时.在正则规则中属于通配符,也会增加误匹配概率。另外如果短后缀(如.co)先于长后缀(如.co.jp)执行替换,还会导致长后缀无法被正常识别。
实现代码
import re # 不要用list作为变量名,避免覆盖Python内置关键字 suffix_list = ['.com','.co','.de','.co.jp','.co.uk','.lk','.it','.es','.ua','.bg','.at','.kr'] # 按后缀长度倒序排列,优先匹配更长的后缀,避免短后缀提前截断长后缀 suffix_list_sorted = sorted(suffix_list, key=lambda x: -len(x)) # 生成正则规则:自动转义特殊字符 + 行尾锚点$限定只匹配末尾的后缀 pattern = '|'.join([f'{re.escape(suffix)}$' for suffix in suffix_list_sorted]) # 开启正则模式,一次性完成全部替换 df['source'] = df['source'].str.replace(pattern, '', regex=True)
效果说明
- 字符串
siliconvalley.co会被正确替换为siliconvalley - 字符串
example.co.jp会被正确替换为example - 包含中间字符
co的字符串siliconvalleycore.com只会替换末尾的.com,得到siliconvalleycore,不会误替换中间的co字符
内容的提问来源于stack exchange,提问作者Dhiraj D
相关产品推荐
相关产品推荐

