正则表达式总结

本文通过具体的字符串实例深入浅出地总结了Python中的正则表达式,包括d、D、w、W等特殊字符的匹配规则,以及*、+、?、{n}、{n,m}等量词的使用方法。此外,还介绍了^和$的开始和结束匹配,|的或操作,以及贪婪与非贪婪模式。同时,讲解了正则表达式在Python中的应用,如match()、search()、group()、findall()、sub()和split()等函数的用法。

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

用字符串实例来总结正则表达式,一例胜百解

可以下载我总结的文档,文档中的文字用颜色区分,方便注意小细节,下载地址:
https://github.com/akh5/Python/blob/master/python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%80%BB%E7%BB%93.docx

import re
text = "字符串"
ret = re.match('正则表达式',text)
print(ret.group())

match是从字符串第一个字符开始匹配

\d匹配纯数字(仅仅匹配一个字符):

text = "12345678"
ret =re.match('\d',text)
print(ret.group())

输出1  

\D匹配非数字(仅匹配一个字符):

text = "a2345678"
ret =re.match('\D',text)
print(ret.group())

输出a

\w匹配字母,下划线,数字(与变量的命名先相同)

text = "a2345678"
ret =re.match('\w\w',text)
print(ret.group())

输出a2

\W与\w的匹配相反:

text = "+-*/"
ret =re.match('\W',text)
print(ret.group())

输出 +

\s的只匹配特殊标识符”\n \r”之类:

text = "\n"
ret =re.match('\s',text)
print(ret.group())

输出的是  换行的空白

.匹配任意字符:

text1 = "123"
text2 = "abc"
ret1 =re.match('.',text)
ret2 =re.match('.',text)
print(ret1.group(),ret2.group())

输出的是  换行的空白

[]用来组合自己想匹配的内容,只匹配[]内字符:

text = "abc"
ret =re.match('[abcdefg]',text)
print(ret.group())

输出 a

用[]来组合成\d,\D,\w,\W:
\d: [0-9] (-意思是从0到9的10个数字)
\D: [^0-9] (^意思是非,匹配除了0到9的数字)
\w: [a-zA-Z0-9_] (匹配a到z,A到Z,0到9和_)
\W:[^a-zA-Z0-9_]

匹配多个字符

*配合重复*之前条件,匹配多个任意字符:

text = "123456789"
ret =re.match('\d*',text)
print(ret.group())

输出 123456789


text = "123456789"
ret =re.match('1*',text)
print(ret.group())

只输出1


text = "111123456789"
ret =re.match('1*',text)
print(ret.group())

输出 1111

+匹配一个或多个任意字符(与*相似)

text = "abcdefg"
ret =re.match('\w+',text)
print(ret.group())

输出 abcdefg

*与+的区别:
*与+的匹配模式相同 但是:

text = "12aab12abc12a"
ret =re.findall('ab+',text)
print(ret)

输出ab ab

text = "12aab12abc12a"
ret =re.findall('ab*',text)
print(ret)

输出a ab ab a

同样是匹配ab
但是ab*比ab+多了 a 的匹配

?只匹配一次或0次:

text = "abc"
ret =re.match('\w?',text)
print(ret.group())

输出 a  只匹配到第一个符合的就停止向下匹配

{n} 用{}来选择自己想匹配多少个结果:

text = "abcdef"
ret =re.match('\w{3}',text)
print(ret.group())

输出  abc

{n,m}匹配n-m个结果:

text = "abcdef"
ret =re.match('\w{3,5}',text)
print(ret.group())

输出 abcde


text = "abc"
ret =re.match('\w{3}',text)
print(ret.group())

输出  abc

开始和结束匹配符:

^表示开始:

text = "abcdef"
ret =re.search('^a\w\w',text)
print(ret.group())

输出 abc


text = "bcdef"
ret =re.search('^a\w\w',text)
print(ret.group())

则无法匹配

$表示结束

text = "abcdef"
ret =re.search('a*f$',text)
print(ret.group())

输出 abcdef


text = "abcde"
ret =re.search('a*f$',text)
print(ret.group())

则无法匹配

| 意思是 或 与c语言||用法相同:

text = "abcde"
ret =re.search('(ab|cd)',text)
print(ret.group())

输出ab

贪婪模式与非贪婪模式

text = "<h1>标题<h1>"
ret =re.search('<.*>',text)
print(ret.group())

此时为贪婪模式,这时候这里的尖括号分别是最前的<和最后的> 返回的是<h1>标题<h1>

text = "<h1>标题<h1>"
ret =re.search('<.*>?',text)
print(ret.group())

而非贪婪模式,则是在最后加?防止向后继续查找,返回的便是<h1>

\转义字符:

text = "\\w"
ret =re.search('\\\w',text)
print(ret.group())

因为\w是正则表达式的标识符,如果想查找\w的话,就在前加\转义\


text = "."
ret =re.search('\.',text)
print(ret.group())
.代表匹配任意字符,但是想匹配.的话就得把.加上\转义\.

r” ” 原生字符串:
字符串” ”引号前加r,则引号内的标识符不做处理按原样输出
通常print(“\n”)输出为空,但是用原生字符串的处理方法print(r“\n”)就能输出\n

re中函数:

match():
只会从一个字符串的开始位置,进行匹配
search():
可以从字符串中,任意位置开始匹配

group():分组函数:
一个括号代表一组

text = "abcd1234"
ret =re.search('([a-d]+)(\d+)',text)
print(ret.group())

ret.group(1)为第一组,返回的是abcd
ret.group(2)为第二组,返回的是1234

findall():

text = "12aab12abc12a"
ret =re.findall('ab+',text)
print(ret)

返回的是找到所有符合匹配的结果的列表['ab', 'ab']

sub():替换字符串函数:

text = "abc"
ret =re.sub('abc','123',text)  第一个参数为原字符串,第二个参数为替换
print(ret)

返回的是一个字符串 结果为123

split()分割字符串函数:

text = "a|b|c"
ret =re.split(',',text)
print(ret)


参数为 以什么分割
返回一个列表['a', 'b', 'c']

compile():可以把正则表达式先编译起来放在变量当中

text = "abcd1234"
r =re.compile('\w*',text)
ret =re.search(r,text)
print(ret.group())


compile中的正则表达式可以加注释。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值