栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

正则表达式的基本使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式的基本使用

一、定义

筛选符合定义的东西,正则寻找的永远是字符串。

二、模块与匹配过程

在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个Python自带的模块,名字为re。

正则表达式的大致匹配过程是:

1.依次拿出表达式和文本中的字符比较,

2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

三、文章概述(思维导图展示)

四、正则表达式常用函数

表2 常用函数

函数

定义

使用方法

re.match

从头开始匹配需要查找的字符,如果不成功会返回空值

result = re.match(“正则表达式”, 字符串)

re.search

可以查找字符串的任意位置,匹配整个字符串,会返回匹配的内容和匹配的位置,查找到一个匹配后不再向下查找

result = re.search(“正则表达式”, 字符串)

re.findall

同search函数一样可以匹配整个字符串,查到一个后会继续向下查找,直到字符串末尾,并返回全部符合条件的字符串

result = re.findall(“正则表达式”, 字符串)

re.sub

用于替换字符串中的值

result = re.sub(“正则表达式”, “新内容”,字符串)

re.spilt

用于按照给定的字符去切割字符串

result = re.spilt(“正则表达式”, 字符串)

五、正则表达式预定义

(一)正则表达式表格展示

表1 正则表达式预定义

字符

功能

.

寻找任意字符(除了n)

[ ]

寻找[ ]中列举的字符

d

寻找数字,即0-9

D

寻找⾮数字,即不是数字

s

寻找空⽩,即空格,tab键

S

寻找⾮空⽩字符

w

寻找单词字符,即a-z、A-Z、0-9、_

W

寻找⾮单词字符

*

寻找前一个字符出现>=0次

+

寻找前一个字符>=1次

?

寻找前一个字符出现0或1次

{m}

用于验证将前面的模式匹配m次,即限制m位

{m,}

用于验证将前面的模式匹配m次或者多次

{m,n}

用于验证将前面的模式匹配大于等于m次且小于等于n次

^

匹配字符串开头

$

匹配字符串结尾

(二)示例部分

示例1:qq号码验证

目标:5-11位,开头不能是零,以qq = "10471204"为例。

表达式:

result = re.match("^[1-9][0-9]{4,10}$", qq)

print(result)

对应说明:

“^”: 此时表达式中的"^"可有可无,因为使用的是match函数,即从头开始匹配。

“[1,9]”: 首先验证开头不能是0,所以匹配开头一个字符为[1-9]

“[0,9]”: 表示后面的数字可以是从0-9,没有限制。

“{4,10}”: {4,10}表示将前一个匹配模式匹配大于等于4次且小于等于10次。前一个匹配模式即为[0-9],即qq号的第2位到第11位可以是从0到9的任意数字。因为第一位不能为0的限制已经占去一个字符,所以从第2位开始匹配“0到9的任意数字”这个条件。且题中限制最短5位,所以至少需要匹配4次。即{4,10}中的4表达的意思,若给出的字符串小于5位则匹配不成功。题中限制最长11位,所以至多只能匹配10次。即{4,10}中的10表达的意思,若给出的字符串大于11位则匹配不成功。

“$”: 表示要一直匹配到结尾。

输出结果:

其中span表示匹配成功字符串的范围,使用result.span()可以提取其内容:
(0, 8)

match表示匹配成功的字符串内容,使用result.group()可以提取其内容:
10471204

示例2:匹配用户名

目标:可以是数字或字母或_,不能以数字开头,用户名长度必须6位以上。

表达式:
    username = "admin_002"
    result = re.search("^[a-zA-Z]w{5,}$", username)
    print(result)

对应说明:

注:此时使用的是search函数,且题中要求从头开始匹配至结尾,所以需要在开头结尾添加”^”与”$”。

“^”:表示从字符串开头开始匹配。

“$”: 表示要一直匹配到结尾。

“[a-zA-Z]”:表示不能以数字开头,所以只能以大小写字母开头。

“w”:表示匹配用户名可以是数字或字母或_。

“{5,}”:用户名长度必须6位以上,所以写入{5,},即将前一个模式匹配五次以上,而并没有小于长度的限制,所以只写{5,}即可。

输出结果:

span表示匹配成功字符串的范围,使用result.span()可以提取其内容:

(0, 9)

match表示匹配成功的字符串内容,使用result.group()可以提取其内容:

admin_002

特别注意的是,当正则表达式中有转义字符时,需要在正则表达式前添加r。

示例3:找寻文件

目标:找到所有py文件

表达式:
msg = "aa.py ab.txt bb.py kk.png uu.py apyb.txt"
result = re.findall(r"w+.pyb", msg)
print(result)

对应说明:

注:因为要寻找所有符合条件的文件,所以需要使用findall函数

“b”:为表示找开头或结尾为某字符的字符串,所以在.py后面添加b。

“w”:表示匹配的字符串可以是数字或字母或_。

“+”:表示文件名长度可以任意。

”r”:其中”b”有转义的意思,所以要在整个字符串前加”r”。且”.” 在正则中有寻找任意字符串的意思,所以要加转义字符。

若不加”r”,则需要在其前加””,即re.findall("w*\.py\b", msg)

输出结果:

['aa.py', 'bb.py', 'uu.py']

六、分组正则

在爬虫中通常需要使用分组正则来提取想要的内容,再使用group()进行输出。

示例1:

目标:要求提取标签内的内容,即”hello”。

表达式:

msg1 = "hello"

result = re.match(r"(.+)", msg1)
print(result)
print(result.group(1))

对应说明:

在正则表达式中,每一个()里的内容就是一组,如例4中”(.+)”中的”.+”即为一组。

”.+”:表示提取的内容可以是除空格外的任何字符,且长度>=1。

“w”:表示匹配的字符串可以是数字或字母或_。

”r”: 当正则表达式中有转义字符时,需要在正则表达式前添加”r”。

输出结果:

使用print(result.group(1))可以在控制台得到输出内容:

hello

当标签过多时可以将标签也分组,如msg = "hello",前后标签一致时,此时分组正则有两个起名方式。

1、number:使用1,2的方式进行引用。

表达式:

result = re.match(r"<(w+)><(w+)>(.+)$", msg)

print(result)

print(result.group(1))

print(result.group(2))

print(result.group(3))

对应说明:

”.+”:表示提取的内容可以是除空格外的任何字符,且长度>=1。

“w”:表示匹配的字符串可以是数字或字母或_。

“$”: 表示要一直匹配到结尾。

”r”: 当正则表达式中有转义字符时,需要在正则表达式前添加”r”。

“1”:表示引用前面第一个括号内的内容

“2”:表示引用前面第二个括号内的内容。

输出结果:

hello

html
h1
hello

即第一组内容为html,第二组内容为h1,第三组内容为hello。

七、贪婪与非贪婪

Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。

示例1:

表达式:

msg = "abc123abc"
result = re.match(r"abcd+", msg)
print(result)

对应说明:

“d”:表示匹配0-9的任意数字。

”+”:表示匹配前一个字符>=1次。

”r”: 当正则表达式中有转义字符时,需要在正则表达式前添加”r”。

输出结果:

所以可以在"*"(匹配前一个字符出现>=0次),"?"(匹配前一个字符出现0或1次),"+"(匹配前一个字符>=1次),"{m,n}"(用于验证将前面的模式匹配大于等于m次且小于等于n次)后⾯加上"?",使贪婪变成⾮贪婪。

示例2:

表达式:

result = re.match(r"abcd+?", msg)
print(result)

对应说明:

“d”:表示匹配0-9的任意数字。

”+”:表示匹配前一个字符>=1次。

”r”: 当正则表达式中有转义字符时,需要在正则表达式前添加”r”。

输出结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029227.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号