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