Python正则表达式

这篇博客详细介绍了Python中的正则表达式使用,包括re模块的功能、正则语法如匹配类符号、控制次数的符号、分组和分支,以及检测类符号。此外,还讨论了贪婪和非贪婪模式,并提供了多个实例演示。通过学习,读者可以掌握正则表达式在Python中的应用,用于字符串匹配、查找和替换等任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

正则表达式是一种可以让一些复杂的字符串问题变得简单的工具。

正则语法(通用)

1.re模块

fullmatch(正则表达式,字符串) :判断字符串是否满足正则表达式描述的规则(完成匹配)

python提供正则表达式的方法:提供一个字符串,字符串内容是一个正则表达式,这个字符串的最前面需要加r

python的正则表达式:r’正则’

js的正则表达式:/正则/

ac的正则表达式:“正则”

2.正则语法内容

包括:匹配类符号、控制次数的符号、分组和分支、检测类符号、阻止转义

匹配类符号

约束字符串中某个位置上的字符式什么样的字符

1.普通符号(字符)

在正则表达式表示符号本身的符号就是普通符号(除了特殊符号以外的都是普通符号)

2.特殊符号

. :匹配任意一个字符

\d:匹配任意一个数字字符

\s:匹配任意一个空白字符(任何可以产生空白效果的符号:空格、\t、\n)

\D:匹配任意一个非数字字符

\S:匹配任意一个非空白字符

[字符集]:匹配字符集中的任意一个字符

[多个普通字符] - [mnab]:匹配m或者n或者a或者b

[\dmn]:匹配任意一个数字或者m或者n

[\d\s]:匹配任意一个数字或者任意空

[1-9]:匹配1到9中任意数字

[0-9]:和\d效果一样

[1-5a-z]:匹配数字1到5或者任意小写字母

[A-Za-z]:匹配任意一个字母

[\u4e00-\u9fa5]:匹配任意一个中文

[\u4e00-\u9fa5wp]:匹配任意一个中文或者w或者p

[^字符集]:匹配不在字符集中的任意一个字符

控制次数的符号

控制次数的符号的用法:匹配类符号次数

*:任意次数(0或者多次)

+:一次或者多次

?:0次或者1次

{}

{N}:N次

{M,N}:M到N次

{M,}:至少N次

{,N}:最多N次

练习 :写一个正则表达式可以匹配任意一个整数

from re import fullmatch
print(fullmatch(r'[+-]?[1-9]\d*','-123'))

贪婪和非贪婪模式

在匹配次数不确定的时候,匹配次数有贪婪和非贪婪两种模式

默认是贪婪模式:*、+、{M,N}、{M,}、{,N}

贪婪模式:如果多种匹配次数都可以匹配成功,最后取最大的次数进行匹配

非贪婪模式:*?、+?、{M,N}?、{M,}?、{,N}?

如果多种匹配次数都可以匹配成功,最后取最小的次数进行匹配

分组和分支

1.分组:()

1)整体操作:将正则的一部分用()括起来表示一个分组,然后整体控制次数

2)重复匹配结果:在正则中用()添加分组,然后在正则中用’\M’来重复它前面第M个分组的匹配结果

3)捕获:findall函数在正则表达式中有分组

2.分支:|

正则1|正则2|正则|…

注意:如果是正则的部分要进行分支选择,需要将部分分支加()

检测类符号

检测类符号:检测符号所在的位置是否符合条件(必须是在匹配成功前提下才检测)

1.单词边界:\b

检测\b所在的位置是否是单词边界。

单词边界:凡是可以将两个单词区分开的符合都是单词边界,比如:字符串开头、字符串结尾、空白字符、标点符号等!

注意:检测类符号不影响字符串长度

2.检测字符串开头:^

3.检测字符串结尾:$

转义字符

1.转义字符

在正则中本身具备特殊功能或者特殊意义的符号前加’\‘,让它的功能消失变成普通符号。

2.[]也可以让独立存在有意义的符号功能消失

+、*、?、.、^、$、|等

注意:^和-在[]中的意义,[]在[]中需要加\

re模块

1.re模块中常用的函数及其功能

fullmatch(正则,字符串):判断整个字符串是否描述正则描述的规则,如果不满足结果是None,满足返回匹配对象

match(正则,字符串):匹配字符串的开头是否符号要求,如果不匹配返回None,否则返回匹配对象

search(正则,字符串):在整个字符串中查找第一个满足正则表达式的子串,如果找不到返回None,否则返回匹配对象

findall(正则,字符串):获取字符串中所有满足正则的子串,返回一个列表(注意分组的问题)

finditer(正则,字符串):获取字符串中所有满足正则的子串,放回一个迭代器,迭代器中的元素是匹配对象

sub(正则,字符串1,字符串2):将字符串2中所有满足正则的子串全部替换成字符串1

split(正则,字符串,次数):将字符串中所有满足正则的子串作为切割点对字符串进行切割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值