掌握正则表达式
正则表达式就是帮你匹配指定规则的字符串,它在计算机的应用非常广泛
我们平时编译器中的语法分析器会使用正则表达式去匹配代码中的关键字,网站中的表单,就类似与登录注册页面会用正则表达式去帮你判断文本框的复杂性。
在爬虫中可以利用正则表达式去提取我们需要的信息
为了测试所写的正则表达式,可以使用编辑器内置的搜索工具,比如vscode搜索框的最右边,我们可以点以下这个图标,用正则表达式去搜索字符串
也可以使用在线的测试工具:https//:regex101.com
工具下面是你要测试的文本,上面是正则表达式,左边可以选择正则表达式在不同编译语言下的变体,右边是一些帮助信息和参考文档。
正则表达式的最基础的用法:
限定符
? 是一个特殊的字符,是一个限定符
used? 它代表前面这个字符 d 需要出现 0 次或者 1 次
* 也是一个限定符
ab*c 它会匹配这个字符串中 0 个或者多个包含b的字符串
+ 则是匹配包含一个及以上的字符串
{} 可以精确的匹配规定出现的次数
{6} 表示出现6次,{2, 6} 表示出现2到6次
{2, }可以省略后面的数字表示出现两次以上
以上? * + {}都是限定符,但表示的对象只是一个字符
要表示多个字符可以用{}括起来
{ab}+ 表示重复出现的ab
“或”运算符
| 或运算符
a (cat | dog) 该语句就是先匹配a然后空格,后面衔接cat或者dog
中间用|隔开,括号是必不可少的,不然就是匹配a cat,或者就是纯dog
字符类
[abc]+ 方括号里的内容代表要求匹配的字符只能取自于它们
也可以在括号内指定字符的范围
[a-z] 代表所有小写的英文字符
[a-zA-Z] 代表所有英文字符
[a-zA-Z0-9] 代表所有英文字符和数字
如果在方括号前面加上^ 表示匹配出^后面列出的以外字符
比如[^0-9] 代表所有的非数字字符(包括换行符)
另外正则表达式中其实为我们与预先定义好了一系列常用的字符类型
就是元字符
正则表达式中的大多数元字符都以反斜杠开头
\d 代表数字字符,等同于[0-9]
\w 代表单词字符(英文、数字及下划线),也就是所有的英文字符、数字及下划线
\s 空白符(包含Tab和换行符)
\D 非数字字符,与\d相对应
\W \S 同理
\b 是正则表达式规定的⼀个特殊代码,代表着单词的开头或结尾,也就是单词的分界处。
. 在正则表达式中也是一个特殊字符,它代表任意字符,但不包含换行符
\. 就是用反斜杆作转义,就是纯 . ,而不是特殊字符表任意字符
^ 匹配行首 $ 匹配行尾
^a 只会去匹配行首的a a$ 则会去匹配行尾的a
接下来,我们来介绍一下正则表达式中的一些高级概念
贪婪与懒惰匹配
前面我们讲到的* + {}在匹配字符串的时候,默认会去匹配会尽可能多的字符
<sapn><p> test </p><span>
<.+>去匹配上面的html标签,<span></span>和<p></p>
结果如下图全部都给匹配上了,原因是因为中间的的这个 .+ 会匹配尽可能多的
字符
我们知道 . 能代表任意字符,自然也会匹配右尖括号,因此才会出现这样的结果
结果方法就是在+后面加上?
它会将正则表达式中默认的贪婪匹配 (Greedy Match)切换为懒惰匹配(Lazy Match)
<.+?>
总结:
以上就是正则表达式的基本内容了,学这个也是为了方便后续爬虫从页面中提取内容。