Python文本处理需用re模块精准清洗脏数据并提取结构化信息:先清除零宽字符、HTML标签等,再用strip()和replace()规范空白;邮箱、手机号、日期等正则需加\b防误匹配;替换宜用函数控制逻辑,调试时结合findall、compile及regex101验证。
字符串清洗和正则表达式是Python文本处理的核心技能,关键在于理解常见脏数据模式,并用re模块精准匹配与替换。
真实文本常含多余空格、不可见字符(如 \u200b、\xa0)、中英文标点混用、HTML标签、乱码符号等。清洗不是“删光所有非字母”,而是按业务目标保留有效信息。
strip()去首尾空白,replace('\xa0', ' ')把不间断空格转为空格re.sub(r'[\u200b\u200c\u200d\uFEFF]', '', text)清除零宽字符html.unescape()解码HTML实体(如 → ),再配合re.sub(r']+>', '', text)删标签正则不是万能,但对固定格式内容(手机号、邮箱、日期、ID号)效率极高。关键是写“够用且不易误匹配”的模式。
r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'——加\b防匹配到长字符串中间r'1[3-9]\d{9}',比r'1\d{10}'更准确,排除10位或12位伪号r'\b\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2}\b',注意转义点号用re.sub()时,避免直接传入未校验的字符串做替换内容;复杂逻辑建议用函数作为replacement参数。
'010-1234-5678'、'13812345678'都转为'138-1234-5678',可写函数判断长度后格式化re.sub(r'(身份证|ID|证件号)\s*[::]?\s*(\w+)', r'\1: ****', text),捕获组让替换更可控re.DOTALL和re.MULTILINE——除非真需要跨行匹配,否则默认行为更稳定正则写完别急着集成,先在小样本上验证边界情况。
re.fin
dall()看是否漏匹配或多匹配,比如测试邮箱正则时,输入'contact@abc.com.cn'和'fake@abc.comx'
re.compile()后加pattern.pattern打印原始正则,确认转义正确(如r'\.' → \.)regex101.com(选Python flavor)可视化匹配过程,尤其查贪婪/非贪婪(.* vs .*?)