Python支持的正则表达式的常用符号
说明:
(1) “.”字符为匹配配仟意单个字符。例如,a.b可以的匹配结果为abc,aic、a&c等,但不包括换行符。
2) “\”字符为转义字符,可以把字符改变为原来的意思,听上去不是很好理解。
例如:’.‘字符是匹配任意的单个字符,但有时不需要这个功能,只想让它代表一个点,这时可以使用’.‘就能匹配为’ . ’ 了。
3 […]字符集,相当于在中括号中任选一个。例如a[bcd],匹配的结果为ab、ac、ad。
**预定义字符集 **
正则表达式的预定义字符集易于理解,在爬虫实战中,常常会匹配数字而过滤掉文字部分的信息。例如’字数 3450’,只需要数字信息,可以通过’\d+’ 来匹配数据,’+'为数量词,匹配前一个字符1或无限次,这样就可以匹配到所有的数字。
数量词
说明:
(1)" * " 数量词匹配前一个字符0或无限次。例如ab*c匹配ac、abc、abbc、abbbc等。
(2)‘+’ 与‘ * ’类似,只是匹配前一个字符一次。例如,ab+c匹配abc、abbc和abbbc等
(3)‘?’数量词匹配前一个字符0或1次。例如,ab?c 匹配 ac和abc。
(4)‘m’数量词匹配前一个字符m次。例如,ab{3}c 匹配abbbc。
(5)‘{m,n}’数量词匹配前一个字符m至n次。例如,ab{1,3}c匹配 abc、abbc和abbbc。
边界匹配
说明:
(1) ‘ ^ ’ 匹配字符串的开头。例如,^abc匹配abc开头的字符串。
(2)’ $ ’ 匹配字符串的结尾。例如,abc$匹配abc结尾的字符串。
(3)’ \A ‘匹配字符串的结尾。例如,\Aabc。
(4)’ \Z ’ 匹配字符串的结尾。例如,abc\Z。
边界匹配在爬虫实战中的使用较少,因为爬虫提取的大部分为标签中的数据,例如186好笑提取数字数字信息,边界匹配在这里没有任何作用。
最后介绍爬虫实战中最常用的(.?),"()"表示括号的内容作为返回的结果。“ .? ”是非贪心算法,匹配任意字符。例如,字符串‘xxlxxjshdxxlovexxsffaxxpythonxx’,可以通过’xx(.*? )xx’匹配符合这种规则的字符串,代码如下:
import re
a = 'xxlxxjshdxxlovexxsffaxxpythonxx'
info = re.findall('xx(.*?)xx',a)
print(info)
运行结果如下:
[‘l’, ‘love’, ‘python’]