正则导读
正则之字符组
- [字符组] 在同一个位置可能出现的各种字符组成了一个字符组
[0123456789] # 匹配0-9中某个字符的单个结果
[0-9] # 匹配0-9中某个字符的单个结果
[a-z] # 匹配a-z中某个字符的单个结果
[A-Z] # 匹配A-Z中某个字符的单个结果
[0-9a-zA-Z] # 匹配数字或小写字母或大写字母的单个结果
正则之元字符
. # 只能匹配除换行符以外的任意字符
\w # 只能匹配字母或数字或下划线,也不能匹配换行符
\s # 只能匹配任意的空白符(其实就是空格)
\d # 只能匹配任意的数字
\n # 匹配换行符(其实就是回车键)
\t # 匹配制表符(其实就是tab键)
\b # 匹配一个单词的结尾
\W # 不能匹配字母或数字或下划线,也不能匹配换行符
\D # 不能匹配任意的数字
\S # 不能匹配任意的空白符(其实就是空格)
^ # 匹配字符串的开始的字符
$ # 匹配字符串的结尾的字符
| # 管道符,表示或 前面的字符或者后面的字符
() # 优先匹配括号内部的表达式
[] # 匹配到字符组内的字符
\n 换行
\t 制表
\\ 取消转义
正则之量词
- 其实就是控制我们正则表达式中匹配到的字符出现的次数
* # 可以重复零次或更多次 (默认都是贪婪匹配,按最多的取)
+ # 可以重复一次或更多次
? # 可以重复零次或一次
{} # 可以控制字符重复的次数
{n,} # 从重复 n 次开始,最低最低你要重复 n 次,多的就是更多次
{n,m} # 从重复 n 次开始 ,知道 m 次结束
正则表达式的使用场景
- 在爬虫兴起的时候。正则非常火,但是正则表达式太复杂了
- 在爬虫发展过程中那个,随着大佬们技术的兴起
- Bs4 -- beautifulsoup
- Lxml --- etree
- 将文档实例化成HTML对象
- 你只需要在页面上找对相应的位置,直接复制表达式,就能完成匹配工作
- 晚上大多数案例其实都是用正则写的
- 现在正则表达式大多数都用来
- 正则表达式,你只要写错一个字符的匹配格式,你整个正则表达式都不会起作用
- 想要正则表达式
- 首先不要自己去想,去写,你自己写的 99% 都是错的
- 问百度,搜相关关键字,网上会有大佬们写现成的正则表达式
- 扔给GPT,让GPT帮你生成正则表达式
- 测试正则表达式 --- 需要自己结合自己的需求进行完善
- 有一个很重要的前提是:你必须能看懂!
- 只要思想不滑坡,办法总比困难多!
- 懂得取舍和思考解决办法,不要死板
正则小练习之重复匹配
海. 海燕海娇海东王 海燕海娇海东
^海. 海燕海娇海东王 海燕
海.$ 海燕海娇海东 海东
李.? 李杰和李莲英和李二棍子 李杰 李莲 李二
# ? 可以出现 0 次 或者 1 次,默认都是最多次
# ? 是对 . 起作用的
# 意思就是 . 可以出现 0 次 李
# 可以出现一次 李.
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
# * 可以出现零次或更多次,默认是更多次
# * 是 对 . 起作用的
# . 可以出现 0 次 李
# . 可以出现无数次 李..........
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
# + 可以出现 1 次或更多次,默认是更多次
李.{1,2} 李杰和李莲英和李二棍子 李杰和 李莲英 李二棍
# {n,m} 重复 n 次到 m 次,最少 n 次,最多 m 次
# 李.. 重复匹配 李+任意两个字符
正则小练习之字符集
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子
# [] : 字符组,取字符组中的任意一个
# * 可以重复无数次
李[^和]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子
[\d] 456db4 4 5 6 4
[\d]+ 456db4 456 4
# + 可以重复一次或更多
正则小练习之分组匹配
^[1-9]\d{13,16}[0-9x]$ 110101198001017032 110101198001017032 表示可以匹配一个正确的身份证号
^[1-9]\d{13,16}[0-9x]$ 1101011980010170 1101011980010170 表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字
^[1-9]\d{14}(\d{2}[0-9x])?$ 1101011980010170 False 现在不会匹配错误的身份证号了 ()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
`^([1-9]\d{16}[0-9x] [1-9]\d{14})$` 110105199812067023 110105199812067023
正则之非贪婪模式
- ?取消非贪婪模式
- 几个常用的非贪婪匹配,Pattern
- *? 重复任意次,但尽可能少重复
- +? 重复1次或更多次,但尽可能少重复
- ?? 重复0次或1次,但尽可能少重复
- {n,m}? 重复n到m次,但尽可能少重复
- {n,}? 重复n次以上,但尽可能少重复