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位伪号 - 带分隔符的日期(如2023-05-12):
r'\b\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2}\b',注意转义点号
安全替换与动态处理
用re.sub()时,避免直接传入未校验的字符串做替换内容;复杂逻辑建议用函数作为replacement参数。
立即学习“Python免费学习笔记(深入)”;
- 统一电话格式:将
'010-1234-5678'、'13812345678'都转为'138-1234-5678',可写函数判断长度后格式化 - 敏感词脱敏:用
re.sub(r'(身份证|ID|证件号)\s*[::]?\s*(\w+)', r'\1: ****', text),捕获组让替换更可控 - 慎用
re.DOTALL和re.MULTILINE——除非真需要跨行匹配,否则默认行为更稳定
调试与验证技巧
正则写完别急着集成,先在小样本上验证边界情况。
- 用
re.findall()看是否漏匹配或多匹配,比如测试邮箱正则时,输入'contact@abc.com.cn'和'fake@abc.comx' - 在
re.compile()后加pattern.pattern打印原始正则,确认转义正确(如r'\.' → \.) - 用
regex101.com(选Python flavor)可视化匹配过程,尤其查贪婪/非贪婪(.*vs.*?)










