python正则表达式 ---- re模块

1.正则表达式

  正则就是使用一些具有特殊含义的符号组合到一起,来描述字符串或字符的方法。

2.re模块的用法:

(1)search

   #在字符串中匹配,并返回第一个匹配到的值。使用grop可以将值返回出来

print(re.search('ab','abababab123').group())

(2)match

    #只会从字符串的开头匹配,有就返回如果没有则返回None。

print(re.match('ab','123ab456')) 
#等同于
print(re.search('^ab','123ab456'))

(3)findall

   #在字符串中匹配,并以列表的形式返回满足的所有值。  

print(re.findall('ab','abababab123'))

(4)sub

  #用于替换匹配到的字符串。

  #以下就是讲字符串中的 ‘alex’替换成‘DDDD’ 后边的1是只替换一个,不加参数默认替换所有。

print(re.sub('alex','DDDD','alex name is alex alex',1))


# sub 还可以用作更换顺序 #匹配一个字符串 匹配一个非字符串...... 共5个元素,即 字符串 非字符串 字符串 非字符串 字符串,要写更换顺序,直接填写自己想要得到的组合顺序即可 print(re.sub('(\w+)(\W+)(\w+)(\W+)(\w+)',r'\5\2\3\4\1','yxwang is man')) #man is yxwang

 

   #subn 跟sub作用一样,也是替换字符串。不同点是默认会打印出替换了多少次

print(re.subn('alex','DDDD','alex name is alex alex'))

  效果:↓ 

 

(5)split

  #切分字符串  指定以什么作为切分依据

print(re.split('b','abcde')) #以b作为切分对象

    效果:↓

 

#指定切分对象 a或者是b
print(re.split('[ab]','abcde'))

   效果:↓

 

(6)compile

#compile 可以定义一个匹配方法,定义一个变量,后面可以直接饮用这个变量。
#优点是可以重复使用
obj=re.compile('\d{2}')  #数字出现两次

print(obj.search('abc123eeee').group()) #12
print(obj.findall('abc123eeee')) #12

 



 

3.常用的正则匹配模式

import re
print
(re.findall('\w','hello_ | egon 123')) #匹配字母数字下划线 print(re.findall('\W','hello_ | egon 123')) #与小w相反 匹配非数字字符下划线 print(re.findall('\s','hello_ | egon 123 \n \t')) #匹配任意空白字符如 [ \t,\n,\r,\f] print(re.findall('\S','hello_ | egon 123 \n \t')) #与小s相反匹配任意分空白字符 print(re.findall('\d','hello_ | egon 123 \n \t')) #匹配任意数字 print(re.findall('\D','hello_ | egon 123 \n \t')) #匹配任意非数字 print(re.findall('h','hello_ | hello h egon 123 \n \t')) #匹配字符 print(re.findall('\Ahe','hello_ | hello h egon 123 \n \t')) #匹配字符串的开头 等同与^ print(re.findall('^he','hello_ | hello h egon 123 \n \t')) # # print(re.findall('123\Z','hello_ | hello h egon 123 \n \t123')) #匹配字符串的结尾,存在换行,只匹配到换行前的结束字符串。 print(re.findall('123\z','hello_ | hello h egon 123 \n \t123')) #匹配字符串结尾 等同于$ print(re.findall('123$','hello_ | hello h egon 123 \n \t123')) print(re.findall('\n','hello_ | hello h egon 123 \n \t123')) #匹配一个换行符 print(re.findall('\t','hello_ | hello h egon 123 \n \t123')) #匹配一个制表符

 

匹配次数
    *重复零次或多次
    +重复一次或更多次
    ?重复零次或一次
    {n}重复n次
    {n,}重复n次或多次
    {n,m}重复n到m次。
范围
    []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系。
    [0-9] 匹配0~9的数字,同\d
    [a-z]匹配所有的小写字母
    [A-Z]匹配所有的大写字母
    [a-zA-Z] 匹配所有的字母
 
# . 本身代表任意一个字符 
#换行符'\n'不会匹配到,要想匹配到需要在后边加 re.DOTALL 或者 re.S
print(re.findall('a.c','a a1c a*c a2c abc a c aaaaaac aacc a\nc'))
print(re.findall('a.c','a a1c a*c a2c abc a\nc',re.DOTALL))
print(re.findall('a.c','a a1c a*c a2c abc a\nc',re.S))

# [] 内部可以有多个字符,但是本身只配多个字符中的一个
print(re.findall('a[0-9][0-9]c','a a12c a1c a*c a2c a c a\nc'))
print(re.findall('a[a-zA-Z]c','aac abc aAc a12c a1c a*c a2c a c a\nc',re.S))
匹配+ - * / 特殊符号的时候需要加上转义符号
print(re.findall('a[\+\/\*\-]c','a-c a+c a/c aac abc aAc a12c a1c a*c a2c a c a\nc',re.S))

# \ 转义
#如果字符串中出现很多个'\'需要转义,python解释器会交给c语言运行又需要多加一个'\',这样一来则需要加很多个'\'符号。
#所以在字符串前面加上'r' 代表字符串中的'\'可以直接用于正则表达式,不需要再次转义、
print(re.findall(r'a\\c','a\c abc'))

# [^] 代表取反的意思,即匹配到的值不在中括号范围内 
print(re.findall('a[^a-zA-Z]c','aac abc aAc a12c a1c a*c a2c a c a\nc',re.S))

# ? 左边那一个字符有0个或者1个
print(re.findall('ab?','aab a ab aaaa')) #a必须要有,b这个字符可以没有,也可以有1个

# * 左边那一个字符有0个或者无穷个
print(re.findall('ab*','a ab abb abbb abbbb bbbbbb'))  #a必须要有,b这个字符可以没有,也可以有好多个

# + 左边那一个字符有1个或者无穷个 
print(re.findall('ab+','a ab abb abbb abbbb bbbbbb'))   #a必须要有,b这个字符可以有1个,也可由有好多个

#{n,m} 左边的字符有n-m次
print(re.findall('ab{3}','a ab abb abbb abbbb bbbbbb'))  #代表a必须有,b要有三3次
print(re.findall('ab{2,3}','a ab abb abbb abbbb bbbbbb'))  #代表a必须要,b要有2次-3次

# .* 代表匹配所有字符 贪婪匹配,即显示匹配最多的那个
print(re.findall('a.*c','a123c456c'))
# .*? 非贪婪匹配,即匹配到就打印出来
print(re.findall('a.*?c','a123c456c')

# | 从左到右匹配,匹配的一个就成立。条件是左边或者是右边
print(re.findall('yxwang|yxwaa','hello yxwang, you looks liks yxwaa'))

#():分组,从左到右依次匹配,匹配成功一次打印一次结果,但是注意!只显示括号中的内容。
print(re.findall('(ab)','abababab123'))
print(re.findall('(a)b','abababab123'))
print(re.findall('a(b)','abababab123'))

# (?:) 把匹配到的内容都显示出来
print(re.findall('(?:ab)+','abababab123'))  #会显示['abababab']
print(re.findall('(?:ab)+123','abababab123'))  #会显示['abababab123']

 

 

 

 
 
posted @ 2017-08-06 18:05  嘟囔囔小孩  阅读(136)  评论(0编辑  收藏  举报