re模块

正则表达式

预定义字符集(可以写在字符集[…]中)

.    匹配除换行符“\n”外任意单个字符

\w 单词字符:[A-Za-z0-9]

\W 非单词字符:[^\w]

\s 空白符:[<空格>\t\r\n\f\v]

\S 非空白符[^\s]

\d 匹配数字:[0-9]

^开头$结尾

数量匹配:

*   匹配前一个字符0次或无限次

+    匹配前一个字符一次或无限次

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

{m}  匹配前一个字符m次(abc{m},(abc){m})

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

[a-zA-Z ]    匹配范围([^a-z] 取反)

#所有的特殊字符在字符集中都失去其原有的特殊含义


*? +? ?? {m,n}?  使* + ? {m,n}变为非贪婪模式

名称捕获(?P…)


re模块的相关方法:

re.match(p,text)  只匹配开头的位置,返回一个match对象

re.search(p,text)  匹配到了p就返回,只返回第一个匹配到的

re.findall(p,text)  将匹配到的全返回,返回一个list

re.split(p,text)  以匹配到的字符为分隔符切割text,返回一个list

re.sub(p,s,text)  替换,将p匹配到的字符串替换为s


>>import re

>>text=”c++ python2 python3 perl ruby lua java php5 php7”

>>a=re.match(r’c\+\+’,text)  #返回一个match对象(匹配c++)

>>a.group()

>>c++

>>a=re.match(r’java’,text)  #必须从头匹配

>>a.group()

>>print a

>>None

>>a=re.findall(r’python’,text)

>>a

>>[‘python’,’python’]    #返回一个列表

>>li=re.split(r’pe’,text)

>>li

>>[‘c++ python2 python3’,’rl ruby lua java php5 php7’]

>>text=”c++ python2 python3 perl ruby lua java php5 php7c++peeeo text hph”

>>re.findall(r’p[^0-9]*?’,text)  #非贪婪模式

[‘p’,’p’,’p’,’p’,’p’,’p’,’p’,’p’,’p’]

命名分组

>> text=”c++ python2 python3 perl ruby lua java php5 php7c++peeeo text hph”

>>a=re.findall(r’(p[a-zA-Z]+) (0-9)’,text)  #位置分组

>>a

>>[(‘python’,’2’),(‘python’,’3’),(‘php’,’5’),(‘php’,’7’)]

>>a=re.search(r’(?Pp[a-zA-Z]+) (?P[0-9])’,text) #返回match对象

>>a.group()

python2

>>a.groupdict()

{‘name’:’python’,’version’:’2’}

编译模式

pattern=re.compile(p)先编译p模式,当正则表达式比较复杂的时候,会先编译,然后使用result=patter.match(text),就可以使用编译好的模式去匹配各种字符串了,性能会有所提升。

>>p=re.compile(r’(?Pp[a-zA-Z]+) (?P[0-9])’)

>>a=p.search(“python333333”)

>>a.groupdict()

>>{‘name’:’python’,’version’:’3’}

你可能感兴趣的:(re模块)