Python爬虫学习笔记 (10) [初级] 正则 re 常用方法总结

更新日期: 2021.03.31

本节内容

前面的 re 学习笔记内容源自官网文档,逐一介绍了 re 的的诸多才艺。

本节将从 how to 的视角总结常用方法。

1. 分析目标信息在文档中出现的规律

get 网页代码,查看,分析, 略~~

2. 确定查找工具 - 目标是一个还是多个?每个目标出现一次还是多次?

在这里插入图片描述

3. 确定需匹配的字符串 - 目标信息有规律,还是 TA 的上下文有规律?

目标信息有规律: 例如,把文档中的数字找出来,compile 一个符合目标信息的 pattern。
目标信息的上下文有规律:例如,“今日要闻:XXXXXX。

pattern = re.compile(r'\d+')
print(pattern.search("abc123xyz").group()) # 123

print(re.search('今日要闻:(.*?)。',"今日要闻:XXXXXX。").group()) # 今日要闻:XXXXXX。

4. 为需匹配的字符串设计匹配方法

4.1 匹配单个字符

  • 字符可用来匹配他们自身, 如匹配 “a”
  • 某类字符
    \d 匹配十进制数字 [0-9]
    \D 匹配非数字字符,等价于匹配 [^0-9]
    \s 匹配空白字符,等价于类 [ \t\n\r\f\v]
    \S 匹配非空白字符,相当于类 [^ \t\n\r\f\v]
    \w 匹配字母与数字字符,相当于类 [a-zA-Z0-9_]
    \W 匹配非字母与数字字符,相当于类 [^a-zA-Z0-9_]
  • 一定范围内的字符,使用[ ],如[acm-z$/今天]
  • 不在一定范围内的字符,使用[ ^],如[^acm-z$/今天]
  • 通配符. (点)匹配除换行符之外的任何内容。使用 (re.S) 后点也可以匹配换行符

4.2 匹配一定数量的字符

  • * 匹配零至最多次 (贪婪后缀), 例如,ca*t 将匹配 ‘ct’ (0个),‘cat’ 和 ‘caaat’ 等。
  • +匹配一次或多次
  • ? 匹配一次或0次 (非贪婪后缀), 例如,home-?brew 匹配 ‘homebrew’ 或 ‘home-brew’。
  • {m} 匹配至少 m 次, 如果结果少于 m 个会匹配失败。例如,a{6} 不能匹配5个。
  • {m,n} 匹配至少 m 次最多 n 次 (取尽量多) 。

4.3 边界确认 & 开头/结尾

  • ^ 匹配行开头, 除非设置了 MULTILINE 标志,否则只会在字符串的开头匹配
  • $ 匹配行结尾的元字符, 在 MULTILINE 模式下也可以匹配换行符之前的文本
  • \b确认字符边界, 在 Python 字符串中\b 是退格字符, 需使用原始字符串 r 表达
  • \B 仅在当前位置不在边界时才匹配

4.4 转义元字符 \ 和原始字符串 r

使用 \ 转义某些字符看起来不美观时,可以在引号前加 r,或把特殊字符放在 [ ] 里。

4.5 常见格式字符串的匹配 (有空再写~~)

先百度/ CSDN ~~~

5. 匹配标记 (re.S | re.I | re.M | re. X)

可组合使用多种编译标志,如,re.I | re.M 。

  • S 使 ‘.’ 匹配任何字符,包括换行符
  • I 执行不区分大小写的匹配
  • M 多行匹配, 使 ^ 和 $ 可以匹配每行开头和结尾
  • X 扩展, 允许编写更易读的正则表达式
pat = re.compile(r"""
 \s*                 # Skip leading whitespace
 (?P<header>[^:]+)   # Header name
 \s* :               # Whitespace, and a colon
 (?P<value>.*?)      # The header's value -- *? used to
                     # lose the following trailing whitespace
 \s*$                # Trailing whitespace to end-of-line
""", re.VERBOSE)

6. 常用方法总结~~

在这里插入图片描述

7. 其他

re 还有很多其他功能,参见官方文档~

  • 同时使用多种匹配方法 A|B
  • 选择性匹配 扩展标记法 (?=…) , 扩展标记法 (?!…)
  • 等等
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值