Python 正则表达式

1.用途

匹配字符串

字符串提供的方法是完全匹配

2.引入正则表达式

模糊匹配,贪婪匹配

3.元字符

import re

#  . 通配符   
#  代表匹配所有的字符,除了换行符,但是只能代指一个字符
ret=re.findall('h..','hello world')  #['hel']

#  ^
#  只从字符串的开始进行匹配
ret=re.findall('^h..l','hduhedheheelo') #[]

#$
#  只从字符串的末尾开始匹配
ret=re.findall('a..x$','alexyhfueueh')  #[]

# *
#  重复匹配前一个字符0-无穷次
ret=re.findall('ba*','hyfhfhfubaaakdoeko') #['baaa']

# +
#  重复匹配前一个字符1-无穷次
ret=re.findall('ba+','ggdgdgdeyebjdiej') #[]

# ?
#  重复匹配前一个字符0-1次
ret=re.findall('a?b','aaaaabduhedabidjeidb') #['ab', 'ab', 'b']

# {n}{n,m}
#  重复匹配前一个字符n次,或者n-m次
ret=re.findall('a{3}b','aaaaaabbbb') #['aaab']
#{1,}表示1到无穷

#[]
#  字符集  取消元字符的特殊功能,三个例外 \,^,-
ret=re.findall('a[c,d,e]x','aex') #['aex']
ret=re.findall('[a-z]','hfche') #['h', 'f', 'c', 'h', 'e']
ret=re.findall('[w,*]','degdgewldlkd*jmk') #['w', '*']
#^放在[]里面代表:取反
ret=re.findall('[^3,5]','h3d3m5') #['h', 'd', 'm']
#^放在[n,m]里面代表对所有取反

# \
# 后面跟着元字符去掉特殊功能,后面跟着普通字符实现特殊功能
# \d匹配任何十进制数  [0-9]
#\D匹配任何非十进制数 [^0-9]
#\s 匹配任何空白字符串 [\t\r\n\f\v]
#\S 匹配任何非空白字符串[^\t\r\n\f\v]
#\w 匹配任何数字字母字符串[0-9a-zA-Z]
#\W 匹配任何非数字字母字符串[^0-9a-zA-Z]
#\b 匹配任何特殊字符边界,即指单词和空格间的位置,匹配模式前加r

#匹配出满足条件的第一个结果 search函数
ret=re.search('sb','ydgygdsbhujidjsb')
print(ret)#<_sre.SRE_Match object; span=(6, 8), match='sb'>
print(ret.group())#sb

ret=re.search('a\.','ahhfu') #使用\使.含义改变  None

# r
ret=re.search(r'\bh','hhfue').group()#h
#匹配样式前加r是为了告诉python解释器当前转义字符串没有特殊意义,只是普通字符串

# ()
#  组合使用
ret=re.search('(as)+','dasasjfjka').group() #asas

# |
# 分组 或者的意思
ret=re.search('(as)|3','3as').group()  #3

ret=re.search('(?P<id>\d{3})/(?P<name>\w{3})','cgygyegy132/wdej')
print(ret.group())#132/wde
print(ret.group('id'))#132
print(ret.group('name'))#wde
#?P<name> 固定格式 给选取的组起名 

#函数
1.findall
#所有匹配到的结果返回到一个列表里面
2.search
#返回匹配到的第一个结果对象,对象可以使用group函数返回结果
3.match
#只在字符串开始匹配,只返回一个对象,与search类似
4.split
#分割字符串 按照匹配的从左往右顺序分割,第二次将第一次分割后的结果再次进行分割
ret=re.split('[a,b]','afebi')#['', 'fe', 'i']
ret=re.split('[a,b]','agydebke')#['', 'gyde', 'ke']
#空字符串也算是分割后的结果
5.sub
#替换函数
ret=re.sub('a..x','sb','hdehalexide')#hdehsbide
6.compile
#将匹配规则编译为对象, 可以对多个字符串进行同一匹配规则的匹配
obj=re.compile('a..x')
ret=obj.findall('jdjalexjdie')#['alex']

posted on 2018-01-15 00:16  可爱的春哥  阅读(115)  评论(0)    收藏  举报

导航