Python爬虫

六. 正则表达式

2018-02-14  本文已影响0人  橄榄的世界

1. 正则表达式常用符号

1)一般字符

字符 含义 举例 匹配结果
. 匹配任何单个字符(不包括换行符\n) a.b 匹配"abc,a&c"等,但不包括换行符。
\ 转义字符(将特殊含义的字符转成原来的意思) . 匹配为“.”。
[...] 字符集,相当于在中括号中任选一个 a[bcd] 匹配为“ab”,“ac”,“ad”。

2 ) 预定义字符集

字符 含义 等价结果
\d 匹配一个数字字符 [0-9]
\D 匹配一个非数字字符 [^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+’来匹配一个字符1或无限次,例如可以匹配“字数 345”中的“345”。

常见空白字符 含义 ASCII码值
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011

3 ) 数量词

数量词 含义 举例 匹配结果
* 匹配前一个字符0或无限次 ab*c 匹配ac,abc,abbc,abbbc等
+ 匹配前一个字符1或无限次 ab+c 匹配abc,abbc,abbbc等
? 匹配前一个字符0或1次 ab?c 匹配ac,abc
{m} 匹配前一个字符m次 ab{3}c 匹配abbbc
{m,n} 匹配前一个字符m至n次 ab{1,3}c 匹配abc,abbc,abbbc

4 ) 边界匹配

边界匹配符 含义 举例 匹配结果
^ 匹配字符串开头 ^abc 匹配以abc开头的字符串
$ 匹配字符串结尾 abc$ 匹配以abc结尾的字符串
\A 匹配字符串开头 \Aabc 匹配以abc开头的字符串
\Z 匹配字符串结尾 abc\Z 匹配以abc结尾的字符串

边界匹配符在爬虫实战中较少使用。

最后介绍爬虫实战中常用的(.?),"()"表示返回结果,".?"为非贪婪算法,匹配任意字符。

符号 含义 举例 匹配结果
(.*?) 匹配任意字符 xx(.*?)xx 匹配"xxIxxjshdxxlovexxsffaxxpythonxx"中的"I","love","Python"。

举例:

import re
a = 'xxIxxjshdxxlovexxsffaxxpythonxx'
infos = re.findall('xx(.*?)xx',a)
print(infos)

结果:
['I', 'love', 'python']

2. re模块函数及标志修饰符

1) re模块函数

函数名 语法 含义
search() re.search(pattern,string,flags=0) 匹配并提取第一个符合规律的内容,返回一个正则表达式对象。
sub() re.sub(pattern,repl,string,count=0,flags=0) 用于替换字符串中的匹配项。repl:替换后的字符串。string:替换前的字符串。
findall() re.findall(pattern,string,flags=0) 匹配并提取所有符合规律的内容,以列表形式返回结果。

pattern:匹配的正则表达式。
string:匹配的字符串。
flags:标志位,对应标志修饰符。
repl:替换后的字符串。
count:匹配后替换的最大次数,默认0表示替换所有的匹配。

sub()类似于字符串的replace()函数,但sub()函数更加灵活,可以使用正则表达式进行匹配,但replace()做不到。fjndall()在爬虫实战中使用得最多。

2) re标志修饰符

标志修饰符 含义 说明
re.I 对大小写不敏感 例如a可以匹配a或A。
re.L 做本地化识别(Local-aware)的匹配
re.M 多行匹配,影响^ 和 $
re.S 可匹配包括换行符在内的所有字符,实现跨行匹配 最常用
re.U 根据unicode字符集解析字符,此标志影响\w \W \b \B。
re.X 该标志给予更灵活的格式,以便将正则表达式写得更容易理解。
上一篇下一篇

猜你喜欢

热点阅读