Python Pandas使用正则替换移除数字字母混合乱码字符串问题
正则过滤混合字母数字乱码保留合法序数词解决方案
你当前正则错误的核心原因是:r'(?=.*[a-z])(?=.*[\d])[a-z\d]+'会匹配所有同时包含小写字母和数字的字母数字组合串,而1st这类合法序数词也满足「同时有数字+字母」的条件,所以会被误删。
方案1:直接过滤保留合法行(推荐)
如果需求是直接删除无意义乱码所在行,只保留符合规则的序数词行,用str.match匹配规则直接筛选即可:
合法序数词的匹配规则为:开头是数字,结尾是st/nd/rd/th固定后缀,正则写为r'^\d+(?:st|nd|rd|th)$'
代码示例:
# 匹配符合规则的行,直接过滤 df = df[df['strs'].str.match(r'^\d+(?:st|nd|rd|th)$', case=False)] # case=False参数用于兼容大小写场景,比如1ST这类格式也能匹配,不需要可以删除
方案2:将乱码替换为空字符串,保留原行结构
如果需要保留所有行,仅把乱码替换为空值,用where方法实现:
df['strs'] = df['strs'].where(df['strs'].str.match(r'^\d+(?:st|nd|rd|th)$', case=False), '')
规则扩展说明
如果后续需要增加其他合法混合串规则,只需要调整正则的匹配逻辑即可,比如允许合法串包含大小写字母、特殊符号等,都可以在正则里补充对应匹配项。
内容的提问来源于stack exchange,提问作者GSA
相关产品推荐
相关产品推荐

