Python中正则表达式的详解

Python中正则表达式的详解

一:3种常用的匹配模式

1、re.match(pattern,string) 从目标字符串的开始进行匹配

pattern='aacccdddxxefxcz'  #pattern也可以是字符
string='aacccdddxxefxcz123 python_3.2014212086'
result=re.match(pattern,string)# 没有匹配到结果的时候返回None
print(result)
print(result.span()) # 匹配信息的位置
print(result.group())# 匹配信息的内容

在这里插入图片描述

2、re.search(pattern,string) 扫描整个字符串并返回第一个成功的匹配

pattern='cd'
string='abcddddddefg123 python_3.5123abc'
result=re.search(pattern,string)
print(result)
print(result.span())
print(result.group())

在这里插入图片描述
3、re.findall(pattern,string)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,如果匹配成功的部分发生交叉,则取先匹配成功的部分,是不放回的匹配

string='abcddPythonddddefg123Python_3.5123abc'
pattern='Python'
result=re.findall(pattern,string)# 匹配所有符合规则的元素,返回列表
print(result)

在这里插入图片描述

二:通用字符做原子(三种常用的匹配模式均适用)

通用字符做原子
\d匹配数值字符 0-9 \D 取反
\w匹配字符数字中文下划线 \W 取反
\s匹配空白字符 \S 取反
.(点)#匹配除了换行符外所有字符

pattern='\d'
string='abcde123 PY_3.5 ? # % 中文 \n \t'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

三:原子表(自定义单个字符的规则)

pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...]	不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

四:原子表(自定义单个字符的规则)

pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...]	不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

五:元字符

5.1 边界限定元字符

pattern1='[a-zA-Z]$'# 匹配末尾位置
pattern2='^\d'# 匹配开头位置
string='123zc 123python_abc_3.5abc'
print(re.findall(pattern1,string))
print(re.findall(pattern2,string))

在这里插入图片描述
5.2 次数限定元字符

‘*’ 重复前面一个字符0~无穷次
‘+’ 重复前面一个字符1~无穷次
‘?’ 重复前面0-1次
{n} 重复n次 {n,}重复n次到无穷次 {n,m}重复n次到m次

pattern1='abcd*'
pattern2='abcd+'
pattern3='abcd?'
pattern4='abcd{2}'
pattern5='abcd{2,}' # 2-无穷次
pattern6='abcd{2,4}'# 2-4次
string='abcdddddddddefg123 python_3.5abc'
print(re.findall(pattern1,string)) #先重复无穷次再重复0次
print(re.findall(pattern2,string))
print(re.findall(pattern3,string)) #先重复无穷次再重复0次
print(re.findall(pattern4,string)) #重复2次
print(re.findall(pattern5,string)) #重复2-无穷次次
print(re.findall(pattern6,string)) #重复4次

在这里插入图片描述
5.2 模式选择符

pattern='python|php'
string1='abcdefg123 python_3.5abcphp'
string2='abcdefg123 php_3.5abc'
print(re.findall(pattern,string1))
print(re.findall(pattern,string2))

在这里插入图片描述
5.3 模式单元符

pattern='(\w{6})(\d.\d)'
#  (\w{6})(\d.\d)_
string='abcdcdefcdcdg123python3.5_php_3.5abc'
result1=re.search(pattern,string)
result2=re.findall(pattern,string)
print(result1)
print(result2)

在这里插入图片描述

六:贪婪模式和懒惰模式

正则表达式中用于表示匹配数量的元字符如下:
?   重复0次或1次,等同于{0,1}
*  重复0次或更多次,等同于{0,}
+  重复1次或更多次,等同于{1,}
{n,} 重复n次及以上
上面的表示匹配次数的元字符分为贪婪型和懒惰型2种类型。其表达式分别如下。
贪婪型 懒惰型
*     *?
+     +?
{n,}     {n,}?
贪婪型的匹配会去抓取满足匹配的最长的字符串,这个也是正则表达式的默认的模式。当我们不需要最长的匹配的时候就需要使用懒惰模式。

pattern1=r'<li>.*</li>'
pattern2=r'<li>.*?</li>'
string=r'my string is:<li>zc132</li>name<li>404</a></li>'
result1=re.findall(pattern1,string)
result2=re.findall(pattern2,string)
print(result1)
print(result2)

在这里插入图片描述

七:指定匹配字符进行分割

string='a1b2c3d4'
pattern='[0-9]'
result=re.split(pattern,string,2)# maxsplit指定次数
print(result)
print('a-b----c'.split('-'))
print(re.split('-+','a-b----c'))

在这里插入图片描述

八:指定匹配字符进行替换

string='a1 python b2c3d4 cython '
pattern='[cp]ython'
result=re.sub(pattern,'PHP',string,1)# count控制次数
print(result)

在这里插入图片描述

已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页