17370845950

Python文本处理教程_字符串清洗与正则表达式应用
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位伪号
  • 带分隔符的日期(如2025-05-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.DOTALLre.MULTILINE——除非真需要跨行匹配,否则默认行为更稳定

调试与验证技巧

正则写完别急着集成,先在小样本上验证边界情况。

  • re.findall()看是否漏匹配或多匹配,比如测试邮箱正则时,输入'contact@abc.com.cn''fake@abc.comx'
  • re.compile()后加pattern.pattern打印原始正则,确认转义正确(如r'\.' → \.
  • regex101.com(选Python flavor)可视化匹配过程,尤其查贪婪/非贪婪(.* vs .*?