正则表达式对于新手来说,不够友好,因为表达式是由符号构成的,新手看到他会一脸茫然,但是在提取网页信息的时候,熟练运用正则表达式会起到事半功倍的效果。学习正则表达式是你学习网络爬虫绕不过去的。接下来我们就简单介绍一下正则表达式。
之所以称之为正则表达式是因为这串特殊的字符串可以识别 “正则字符串(regular string)” 。所谓的正则字符串指的是有个规律的字符串。你给的字符串符合我的正则表达式我就返回这串字符串;如果不符合我的表达式,我就会忽略它。下面我们列出常用的正则表达式符号,然后在一一进行讲解:
声明:参考资料 《从零开始学Python网络爬虫》 作者:罗攀、蒋仟 机械工业出版社
《python网络数据采集》 作者:[美]Ryan Mitchell 陶俊杰、陈小莉 译 人民邮电出版社
字符 | 含义 |
. | 匹配任意单个字符(包括数字、符号、空格,但不包括换行符 \ n) |
\ | 转义字符(即把有特殊含义的字符转换为普通字符) |
[....] | 匹配任意一个字符(相当于从 [ ] 里面任意选择一个) |
例:a.b 匹配 acb、 asb、a#b、a@b、a&b等等
\^ ,\\ ,\| 匹配 ^ , \ , |
[A-Z],[a-z],[0-9] 匹配 B,b,5 或者 G,h,3 等,只要是方括号里面的都有可能
预定义字符集 | 含义 |
\d | 匹配一个数字字符。等价于 [0 -9] (即从0 - 9 里面任选一个) |
\D | 匹配一个非数字字符。等价于 [^ 0-9](即从不是0-9的字符里面任选一个) |
\s | 匹配任意空白字符,包括空格、制表符、换页符等。等价于[ \f\n\r\t\v] |
\S | 匹配任意非空白字符。等价于 [^\f\n\r\t\v] |
\w | 匹配包括下划线的任意单词字符。等价于 '[A-Za-z0-9_]' |
\W | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]' |
例:\d 匹配 0 或 5 或 6 或 9 等
\D 匹配 d 或 D 或 c 或 h 等
数量词 | 含义 |
* | 匹配前一个字符、子表达式或括号里的字符0次或无限次 |
+ | 匹配前一个字符、子表达式或括号里的字符1次或无限次 |
? | 匹配前一个字符、子表达式或括号里的字符0次或1次 |
{m} | 匹配前一个字符、子表达式或括号里的字符m次 |
{m,n} | 匹配前一个姿符、子表达式或括号里的字符 m 至 n 次 |
例:a*b 匹配 b、aab、ab、aaaaab 等
(abc)*d 匹配 d、abcd、abcabcacbd 等
a+b 匹配 ab、aab、aaaaab 等
(ABC)+b 匹配 ABCb、ABCABCb、ABCABCABCb 等
a?b 匹配 b、ab
(abc)?d 匹配 d、abcd
a{5} 匹配 aaaaa
a{2,6} 匹配 aa、aaa、aaaa、aaaaa、aaaaaa
边界匹配 | 含义 |
^ | 指定字符串开始位置的字符或子表达式 |
$ | 从字符串的末端匹配 |
\A | 仅匹配字符串的开头 |
\Z | 仅匹配字符串的结尾 |
例:^a 匹配 a、apsd、aspe、asfref 等a开头的字符串
abc$ 匹配 abc结尾的字符串 如:qwepabc、deabc 等
现在介绍这些字符的几个重要组合。
1. .* 点星 这两个字符组合的意思是,匹配所有字符串。
2. (.*?)这个叫做非贪婪算法。它可以匹配任意的字符。是爬虫实战中经常用到的表达式。例如 ssHellossWorldss!ss
使用费贪婪算法 ss(.*?)ss 就可以得到 Hello World !
讲完正则表达式之后,接着介绍一下 re 模块。re 模块可以使Python拥有所有的整的表达式功能。具体请参考博文