Python文本处理教程_字符串清洗与正则表达式应用

12次阅读

python文本处理需用re模块精准清洗脏数据并提取结构化信息:先清除零宽字符、html标签等,再用strip()和replace()规范空白;邮箱、手机号、日期等正则需加b防误匹配;替换宜用函数控制逻辑,调试时结合findall、compile及regex101验证。

Python文本处理教程_字符串清洗与正则表达式应用

字符串清洗和正则表达式是Python文本处理的核心技能,关键在于理解常见脏数据模式,并用re模块精准匹配与替换。

识别并清理典型脏数据

真实文本常含多余空格、不可见字符(如 u200b、xa0)、中英文标点混用、HTML标签、乱码符号等。清洗不是“删光所有非字母”,而是按业务目标保留有效信息。

  • strip()去首尾空白,replace('xa0', ' ')把不间断空格转为空格
  • 对整段文本,先re.sub(r'[u200bu200cu200duFEFF]', '', 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'1d{10}'更准确,排除10位或12位伪号
  • 带分隔符的日期(如2023-05-12):r'bd{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.DOTALLre.MULTILINE——除非真需要跨行匹配,否则默认行为更稳定

调试与验证技巧

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

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