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)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值