07. 数据提取-正则表达式

07. 数据提取-正则表达式
最新回答
〆霸气£屌屌″

2026-02-16 06:37:59

正则表达式是一种强大的字符串匹配工具,可用于从复杂文本中提取特定内容。以下是关键要点总结:

一、核心概念
  1. 定义:由特定字符和组合构成的规则字符串,用于定义字符串匹配逻辑
  2. 应用场景:在网页抓取、日志分析、数据清洗等场景中提取结构化信息
二、基础语法规则
  1. 位置匹配

    ^ 匹配字符串开头

    $ 匹配字符串结尾

    A 和 Z 类似但更严格

  2. 字符匹配

    . 匹配任意字符(除换行符)

    d 匹配数字(等价于[0-9])

    w 匹配字母数字及下划线

    [u4e00-u9fa5] 专门匹配中文字符

  3. 数量控制

    * 匹配0次或多次

    + 匹配1次或多次

    ? 匹配0次或1次(非贪婪模式)

    {n,m} 匹配n到m次

三、高级特性
  1. 贪婪与非贪婪模式

    默认贪婪模式(如a.*b会匹配最长可能)

    非贪婪模式(如a.*?b匹配最短可能)

  2. 分组捕获

    () 表示捕获组

    (?:) 表示非捕获组

    1 引用第一个捕获组

  3. 边界匹配

    b 匹配单词边界

    (?=...) 前向肯定断言

    (?!...) 前向否定断言

四、Python常用方法
  1. 匹配函数

    re.match():从开头匹配(返回Match对象或None)

    re.search():扫描整个字符串(返回第一个匹配)

    re.findall():返回所有匹配的列表

  2. 替换功能

    re.sub():替换匹配内容(支持函数式替换)

  3. 修饰符

    re.I:忽略大小写

    re.S:使.匹配换行符

    re.M:多行模式(影响^和$)

五、实用示例
  1. 提取HTML标签内容

    import rehtml = "<div>测试内容</div>"pattern = r"<div>(.*?)</div>"result = re.findall(pattern, html) # 输出:['测试内容']
  2. 处理中文文本

    text = "联系邮箱:test@example.com"pattern = r"[u4e00-u9fa5]+" # 匹配所有中文print(re.findall(pattern, text)) # 输出:['联系邮箱']
  3. 非贪婪匹配

    html = "<p>段落1</p><p>段落2</p>"pattern = r"<p>(.*?)</p>" # 非贪婪模式print(re.findall(pattern, html)) # 输出:['段落1', '段落2']
六、注意事项
  1. 复杂正则表达式可读性差,建议添加注释(使用(?#...))
  2. 过度使用正则可能导致性能问题,超复杂场景考虑专用解析器
  3. 测试正则表达式推荐使用在线工具(如regex101.com)

掌握这些核心概念后,可以高效处理大多数文本提取需求。实际应用中建议结合具体场景选择最简洁有效的表达式,并通过测试验证边界情况。