正则表达式

Sakura 发布于 2023-01-29 377 次阅读


正则的语法: 使⽤元字符进⾏排列组合⽤来匹配字符串 在线测试正则表达式https://tool.oschina.net/regex/
元字符: 具有固定含义的特殊符号 常⽤元字符:

. 匹配除换⾏符以外的任意字符, 未来在python的re模块
中是⼀个坑.
\w 匹配字⺟或数字或下划线
\s 匹配任意的空⽩符
\d 匹配数字
\n 匹配⼀个换⾏符
\t 匹配⼀个制表符

^ 匹配字符串的开始
$ 匹配字符串的结尾

\W 匹配⾮字⺟或数字或下划线
\D 匹配⾮数字
\S 匹配⾮空⽩符

a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示⼀个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

量词: 控制前⾯的元字符出现的次数

* 重复零次或更多次
+ 重复⼀次或更多次
? 重复零次或⼀次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

贪婪匹配和惰性匹配

.* 贪婪匹配, 尽可能多的去匹配结果
.*? 惰性匹配, 尽可能少的去匹配结果 -> 回溯

案例

str: 玩⼉吃鸡游戏, 晚上⼀起上游戏, ⼲嘛呢? 打游戏啊
reg: 玩⼉.*?游戏
此时匹配的是: 玩⼉吃鸡游戏

reg: 玩⼉.*游戏
此时匹配的是: 玩⼉吃鸡游戏, 晚上⼀起上游戏, ⼲嘛呢? 打游
戏

str: 
胡辣汤
reg: <.*> 结果:
胡辣汤
str:
胡辣汤
reg: <.*?> 结果:
str:
胡辣汤
饭团
reg:
.*?
结果:
胡辣汤
饭团

所以我们能发现这样⼀个规律: .? 表示尽可能少的匹配, .表示尽可
能多的匹配, 暂时先记住这个规律. 后⾯写爬⾍会⽤到的哦