码迷,mamicode.com
首页 > 编程语言 > 详细

python中re正则表达式

时间:2019-04-26 19:30:46      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:表达式   字符   rdd   ***   --   不能   多个   作用   add   

1、re匹配的语法

re.math 从头开始匹配,没有匹配到返回None

re.seach 匹配包含,,没有匹配到返回None

re.findall 把所有匹配到的字符,以列表的形式返回,没有匹配到返回空列表[]

re.splitall 以匹配到的字符当做列表分隔符

re.sub 匹配字符并替换

re.fullmath 全部匹配

s=adds231f
print(re.match("[0-9]",s))
print(re.search("[0-9]",s))
print(re.findall("[0-9]",s))

结果:
None
<_sre.SRE_Match object; span=(4, 5), match=2>
[2, 3, 1]

***注意****

match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

group() 返回被 RE 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置
group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串

math、seach匹配到后返回的是一个对象,若要获取匹配到的值要取greap()

s=rasfd23fd5
m=re.match("[0-9]",s)
ss=re.search("[0-9]",s)
if m:
    print("math方法:"+m.group())
if ss:
    print("search方法:"+ss.group())

结果:
search方法:2

 

2、re常用表达式公式

‘.‘ 匹配除\n以外的任意一个字符(从左开始),2个 ‘.’ 就匹配2个字符

s=rasfd23fd5
print(re.search(.,s).group())
print(re.search(..,s).group())

结果:
r
ra

 

‘ ^‘ 匹配字符串开头。在多行模式中匹配每一行的开头

print(re.search(‘^r‘,‘rasfd23fd5‘)) 
print(re.match(‘r‘,‘rasfd23fd5‘))
print(re.search(‘^rs‘,‘rasfd23fd5‘))

结果:
<_sre.SRE_Match object; span=(0, 1), match=‘r‘>
<_sre.SRE_Match object; span=(0, 1), match=‘r‘>
None

  

‘$‘匹配字符串末尾,在多行模式中匹配每一行的末尾

print(re.search(d$,rasfdg))
print(re.search(g$,rasfdg))
结果:
None
<_sre.SRE_Match object; span=(5, 6), match=g>

‘*‘  匹配前一个字符0或多次

print(re.search(a*,rarrdrg)) #要匹配a开关
print(re.search(rar*,rarardrg))
print(re.search(rar*,rarrdrg))
print(re.search(rar*,rarrrdrg)) #匹配ra,rar,rarr,rarr,rarrr......等

结果:
<_sre.SRE_Match object; span=(0, 0), match=‘‘>
<_sre.SRE_Match object; span=(0, 3), match=rar>
<_sre.SRE_Match object; span=(0, 4), match=rarr>
<_sre.SRE_Match object; span=(0, 5), match=rarrr>

 

‘+‘  匹配前一个字符1或多次

print(re.search(a+,rarrdrg)) 
print(re.search(rar+,sraardrg))
print(re.search(rar+,srardrg))
print(re.search(rar+,srarrdrg))
print(re.search(rar+,srarrrdrg))

结果:
<_sre.SRE_Match object; span=(1, 2), match=a>
None
<_sre.SRE_Match object; span=(1, 4), match=rar>
<_sre.SRE_Match object; span=(1, 5), match=rarr>
<_sre.SRE_Match object; span=(1, 6), match=rarrr>

‘?‘  匹配前一个字符1或0次

print(re.search(rar?,sraardrg))
print(re.search(rar?,srardrg))
print(re.search(rar?,srarrdrg))
print(re.search(rar?,sarrdrg))

结果:
<_sre.SRE_Match object; span=(1, 3), match=ra>
<_sre.SRE_Match object; span=(1, 4), match=rar>
<_sre.SRE_Match object; span=(1, 4), match=rar>
None

‘{m}匹配前一个字符m次

print(re.search(a{2},sraardrg))
print(re.search(a{2},srarardrg))

结果:
<_sre.SRE_Match object; span=(2, 4), match=aa>
None

‘{n,m}匹配前一个字符n到m次

print(re.search(a{1,2},sraardrg))
print(re.search(a{1,2},srarardrg))
print(re.search(a{1,2},sraaardrg))

结果:
<_sre.SRE_Match object; span=(2, 4), match=aa>
<_sre.SRE_Match object; span=(2, 3), match=a>
<_sre.SRE_Match object; span=(2, 4), match=aa>

 ‘|‘ 匹配|右边或左边的字符

print(re.search(ar|dr,sraardrg))
print(re.search(ar|dr,srdddrdrg))
结果:
<_sre.SRE_Match object; span=(3, 5), match=ar>
<_sre.SRE_Match object; span=(4, 6), match=dr>

‘(....)’ 分组匹配,

被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

k=re.search(([A-z]+)([0-9]+),Terry913)
k_group =k.group()
k_groups =k.groups()
print(k_group)   #-->Terry913
print(k_groups)  #->(‘Terry‘, ‘913‘)

反斜杠\的作用:

反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
引用序号对应的字组所匹配的字符串。

\w

匹配字母数字及下划线

\W

匹配非字母数字及下划线

\s

匹配任意空白字符,等价于 [\t\n\r\f].

\S

匹配任意非空字符

\d

匹配任意数字,等价于 [0-9].

\D

匹配任意非数字

\A

匹配字符串开始

\Z

匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。

\z

匹配字符串结束

\G

匹配最后匹配完成的位置。

\b

匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。

\B

匹配非单词边界。‘er\B‘ 能匹配 "verb" 中的 ‘er‘,但不能匹配 "never" 中的 ‘er‘。

3 特殊分组

技术图片

 

python中re正则表达式

标签:表达式   字符   rdd   ***   --   不能   多个   作用   add   

原文地址:https://www.cnblogs.com/jodiezhu2019/p/10774497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!