Python 基础之re 模块
Python 基础之大话 re
在使用re模块中主要会用到一下几个方法:
re.match() #从头匹配一个字符串 re.search() #浏览全部字符串,匹配第一个符合规则的字符串 re.findall() #将匹配到的所有内容都放在一个列表中 #re.finditer() re.split() re.sub()
好,先简单的介绍一下re 模块中的基础知识:
1.元字符 . ^ $ * + ? {} [] | () \ ,
2.\的功能:
#1.反斜杠后面跟元字符去除特殊功能
#2.反斜杠后面跟普通字符实现特殊功能
#3.引用序号对应的字组所匹配的字符串
有了上面的基本概念就可以写几个例子来说明一下问题了:
a='abcd'.find('b') b='abcd'.split('b') c='abcd'.replace('ab','er') d=re.findall('alex.w','aaaalexcw')#.为通配符,一个点只能表示一个字符.表示除去换行符以外任意一个字符 e=re.findall('^alex','alexaaalexcw')#^尖角符是用来控制开头的,而$是用来控制结尾的 f =re.findall('alex*','aaaalecw')#*为控制*符号前面的字符重复0~多次 g =re.findall('alex+','aaaalexxxxcw')#+为控制+符号前面的字符重复1~多次 h=re.findall('alex?','aaaalexcw')#?为控制?符号前面的字符重复0~1次 i = re.findall('alex{3,5}','aaaalexxxxxxxcw')#{}为控制{}符号前面的字符重复括号输入的次 g = re.findall('a[bc]d','aaaacdsssssacdvvdabcdf') #[]表示的是字符集的意思字符集中的元素的关系是“或”的意思 #在字符集中[1-9]表示取1到9这几个数字都是可以的,[a-z]表示取a到z这些字母都是OK的 #[^xx]尖角^在字符集中的含义是取字符集中元素的“非”
接下来对上面的常用方法进行举例:
match方法中的有分组与无分组 #1.无分组 prigin = 'hello alex bcd alxe leg alex acd age19' r = re.match('h\w+',prigin) print(r.group()) #获取匹配到的所有结果 print(r.groups()) #获取模型中匹配到的分组结果 print(r.groupdict()) #获取模型中匹配到的分组结果 #2.有分组 #目的是提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来) prigin = 'hello alex bcd alxe leg alex acd age19' r = re.match('(h)\w+',prigin) print(r.group()) #获取匹配到的所有结果,加括号后有无分组没有任何影响 print(r.groups()) #获取模型中匹配到的分组结果,加括号后会把加括号的内容提取出来 print(r.groupdict()) #获取模型中匹配到的分组结果 #在grouopdict()中需要一个键与值与之对应才可使用,在写法上如下例子所示 prigin = 'hello alex bcd alxe leg alex acd age19' r = re.match('(?P<n1>h)(?P<n2>\w+)',prigin) print(r.group()) #获取匹配到的所有结果,加括号后有无分组没有任何影响 print(r.groups()) #获取模型中匹配到的分组结果,加括号后会把加括号的内容提取出来 print(r.groupdict()) #获取模型中匹配到的分组结果 #search方法中的有分组与无分组 #1.无分组 prigin = 'hello alex bcd alxe leg alex acd age19' r = re.search('a\w+',prigin) print(r.group()) #获取匹配到的所有结果 print(r.groups()) #获取模型中匹配到的分组结果 print(r.groupdict()) #获取模型中匹配到的分组结果 #2.有分组 prigin = 'hello alex bcd alxe leg alex acd age19' r = re.search('a(\w+).*(?P<name>\d)$',prigin) print(r.group()) #获取匹配到的所有结果 print(r.groups()) #获取模型中匹配到的分组结果 print(r.groupdict()) #获取模型中匹配到的分组结果 ''' ''' #findall基本方法,做的都是groups()的东西 #1.寻找时是按照一个字符,一个字符的寻找,当找到符合要求的之后(相当于把符合要求的拿走),再从下一个字符开始寻找 r1 = re.findall('\d+\w\d+','a2b3c4d5') print(r1) #2.空的内容也可以匹配 r2 = re.findall('','a2b3c4d5') print(r2) #findall方法中的有分组与无分组 prigin = 'hello alex bcd alxe leg alex acd age 19' r1 = re.findall('a\w+',prigin) print(r1) r2 = re.findall('(a\w+)',prigin) print(r2) r3 = re.findall('a(\w+)',prigin) print(r3) r4 = re.findall('(a)(\w+)',prigin) print(r4) r5 = re.findall('(a)(\w+(e))(x)',prigin)#从左到右,从外到内 print(r5) #finditer 迭代过程可以加入的内容 prigin = 'hello alex bcd alxe leg alex acd age 19' r6 = re.finditer('(a)(\w+(e))(?P<n1>x)',prigin)#从左到右,从外到内 print(r6) for i in r6: print(i,i.group(),i.groups(),i.groupdict()) a = 'alex' n = re.findall('(\w)(\w)(\w)(\w)',a) print(n) n = re.findall('(\w){4}',a) print(n) n = re.findall('(\w)*',a)#*代表有0~很多个,则当为0个时就会出现控格来补充 print(n) n = re.findall('',a) print(n) ''' ''' #re.split方法的讲解(分割的目的) origin = 'hello alex bcd alxe leg alex acd age 19' origin.split('a') print(origin.split('a'))#在字符串中分隔符的用法 #无分组 n = re.split('a\w+',origin,1)#第三个参数的意思是从头开始只分割一次,且此方法不保留分割的字符 #有分组 n1 = re.split('(a\w+)',origin)#在分割的字符上加上括号表示的是不仅需要按此字符分割而且还需要保留此字符 n2 = re.split('a(\w+)',origin) print(n1 , n2) ''' ''' #re.sub 是用来做替换用的 origin = '1jhjhjhj2hjhjhjk4hjhjhjkh5jkhjhjk6hkjk' n1 = re.sub('\d+','DDD',origin,1) n2 = re.sub('\d+','DDD',origin) n3,count = re.subn('\d+','DDD',origin) print(n1) print(n2) print(n3,count)