当我们从HTML text中提取信息时,可以发现很多信息都是有规律的,比如我们要获得网页链接url、提取网页中的IP、查询具有某种规律的字符串。正则表达式就是用于匹配具有某种规律的字符串而产生的,换句话说,正则表达式就是记录文本规则的代码。
一、正则表达式介绍
正则表达式:regular expression (RE)
正则表达式是用来简介表达一组字符串的表达式。
用途:表达文本类型的特征、同时查找替换一组字符串、匹配字符串的部分或全部
二、正则表达式语法
常用的元字符:匹配数字、英文字母、空格等字符
字符 | 描述 |
---|---|
. | 匹配除换行符外的任意字符 |
\w | 匹配字母、数字、下划线或汉字,等价于[A-Za-z0-9] |
\s | 匹配任意的空白符(space) |
\d | 匹配数字(digit) |
\b | 匹配字符串的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用的限定符:指定重复次数
语法 | 描述 |
---|---|
? | 前一字符0次/1次重复 |
+ | 前一字符1次或多次重复 |
* | 前一字符任意次数重复 |
{n} | 扩展前一字符n次 |
{n, } | 扩展前一字符n次或更多次 |
{m, n} | 扩展前一字符m 到 n次 |
常用反义代码:排除某些字符
语法 | 描述 |
---|---|
\W | 匹配非字母、数字、下划线或汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配非单词开否/结尾的位置 |
[^x] | 匹配除了x意外的字符 |
[^abc] | 匹配非a非b非c的单个字符 |
其他常用的操作符
操作符 | 描述 |
---|---|
\ | 转义字符,如\*匹配* ,\\匹配\ |
[] | 字符集,对某个字符给出取值范围 |
| | 左右表达式任意一个 abc|cba 表示abc或cba |
() | 分组标记,内部只能有 | |
贪婪匹配 与 最小匹配:
贪婪:正则表达式尽可能匹配更多的字符,如:用a.b匹配aabab将得到aabab
懒惰:需要尽可能少的匹配,可以在它后面加上一个问号?。如:用a.?b取匹配aabab得到aab
语法 | 描述 |
---|---|
*? | 重复若以此,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0或1次,但尽可能少重复 |
{n, m}? | 重复n到m次,但尽可能少重复 |
{n, }? | 重复n次以上,但尽可能少重复 |
三、正则表达式运算符的优先级
正则表达式从左到右进行运算,并遵循优先级顺序。不同优先级运算时先高后低。
运算符优先级表
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?: ), (?=), [] | 圆括号与方括号 |
*, +, ?, {n}, {n, m} | 限定符 |
^, $, \如何元字符、如何字符 | 位置和字符匹配 |
| | 或操作 |
四、正则表达式举例
easy:
RE | strings |
---|---|
python+ | “python”, “pythonn” “pythonnn”… |
py[th]on | “pyton”, “pyhon” |
py[^t]?hon | “pyhon”, “pyahon”, “pybhon”… |
py{:2}thon | “pthon”, “pyhon”, “pyython” |
complex:
RE | strings |
---|---|
2[0-4]\d | 匹配数字字符串200-249 |
^[A-Za-z]+& | 英文字母字符串 |
^-?\d+& | 整数字符串(正负数) |
^[1-9][1-9]*$ | 正整数字符串 |
[\u4e00-\u9fa5] | 匹配中文字符 |
\d{3}-\d{8}|\d{4}-\d{7} | 电话号码:0731-6666666 |
第七篇python爬虫学习笔记完结啦 cheers ??
ps:正则表达式30分钟入门
参考内容:https://www.bilibili.com/video/av9784617/?p=39