六. 正则表达式

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该标志给予更灵活的格式,以便将正则表达式写得更容易理解。
    原文作者:橄榄的世界
    原文地址: https://www.jianshu.com/p/e102eea870c3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞