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 | 该标志给予更灵活的格式,以便将正则表达式写得更容易理解。 | 无 |