Python的re模块

Python的re模块

1、    compile(pattern):创建模式对象

import re

pat = re.compile('A')

m = pat.search('CBA')  

#等价于re.search(‘A’,’CBA’)

print(m)      

#<_sre.SRE_Match object; span=(2, 3), match='A'>

 

import re
pat = re.compile('a')
m = pat.search('CBA')
print(m)     #没有匹配到,返回None

2、    search(pattern,string):在字符串中寻找模式

import re    
m = re.search('asd','ASDasd')      
print(m)     
#<_sre.SRE_Match object; span=(3, 6), match='asd'>       

上面的函数返回都可以在if条件语句中进行判断:

If pat.search(‘asd’,’ASDasd’):

         Print(‘ok’)

运行输出了‘ok’。

3、    split(pattern,string):根据模式分割字符串,返回列表

a、

import re
m=re.split(',','a,s,d,asd')    #以逗号为分界
print(m)      #['a', 's', 'd', 'asd']

b、

import re
pat = re.compile(',')
m=pat.split('a,s,d,asd')
print(m)      #['a', 's', 'd', 'asd']

c、

import re
m = re.split('[,]+','a,s,d ,,,,,asd')
#正则匹配:[,]+,后面说明
print(m)     #['a', 's', 'd ', 'asd']

d、

import re
m= re.split('[,]+','a,s,d,e, ,,,,,asd',maxsplit=2)
#maxsplit最多分割次数
print(m)   
#['a', 's', 'd,e, ,,,,,asd']

e、

import re

pat = re.compile('[,]+')

m = pat.split('a,s,d,e, ,,,,,asd',maxsplit=2)

print(m)   # ['a', 's', 'd,e, ,,,,,asd']

4、    findall(pattern,string):列表形式返回匹配项

import re

c=re.findall('a','aASDaDSDa')

print(c)         # ['a', 'a', 'a']

 

import re

pat = re.compile('a')

c = pat.findall('aASDaDSDa')

print(c)         # ['a', 'a', 'a']

 

import re

pat = re.compile('[A-Z]+')

c = pat.findall('aASDaDSDa')

print(c)         # ['ASD', 'DSD']

 

import re

pat = re.compile('[A-Z]')

c = pat.findall('aASDaDSDa')

print(c)         # ['A', 'S', 'D', 'D', 'S', 'D']

 

import re

pat = re.compile('[A-Za-z]+')

#正则匹配:'[A-Za-z]+'匹配所有单词

c = pat.findall('aASD aDSDa')

print(c)         # ['aASD', 'aDSDa']

 

import re

pat = re.compile('[A-Za-z]')

c = pat.findall('aASD aDSDa')

print(c)  

#['a', 'A', 'S', 'D', 'a', 'D', 'S', 'D', 'a']

5、    sub(pat,repl,string):用repl替换pat匹配项

import re

c = re.sub('a','A','aASD aDSDa')

print(c)   #AASD ADSDA

 

import re

pat = re.compile('a')

c = pat.sub('A','aASD aDSDa')

print(c)         # AASD ADSDA

 

import re

pat = re.compile(r'www\.(.*)\..{3}')

'''

Pythonstring前面加上‘r’,是为了告诉编辑器这个stringraw string,不要转译反斜杠‘\’。

例如,\nraw string中,是两个字符,\n,而不会转译为换行符。

由于正则表达式和\会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上‘r’。

于大多数编程语言相同,正则表达式里用“\”作为转义字符,这就可能造成反斜杠困扰。

假如你需要匹配文本中的字符“\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠“\\\\:

前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。

Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r\\”表示。

同样,匹配一个数字的\\d可以写成r\d”。

有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

最好记住这句话:

当一个字符串使用了正则表达式后,最好在前面加上‘r’,这样你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观

'''

ret = pat.match('www.dxy.com').group(1)

print(ret)       # dxy

a=re.sub(r'www\.(.*)\..{3}',r'\1','hello,www.dxy.com')

print(a)         # hello,dxy

b = pat.sub(r'\1','hello,www.dxy.com')

print(b)        # hello,dxy

'''

r'\1'是第一组的意思

通过正则匹配找到符合规则的“www.dxy.com”,取得组1字符串去替换整个匹配

'''

 

 

pat = re.compile(r'(\w+)(\w+)')

s = 'hello world! hello hz!'

d = pat.findall('hello world ! hello hz !')

print(d)  

# [('hell', 'o'), ('worl', 'd'), ('hell', 'o'), ('h', 'z')]

c=pat.sub(r'\2\1',s)

print(c)   # ohell dworl! ohell zh!

'''

通过正则得到组1hell),组2o),再通过sub去替换。即组1替换组2,组2替换组1,调换位置

'''

6、    escape(string):对字符串里面的特殊字符串进行转义

import re

a=re.escape('www.dxy.com')

print(a)   #www\.dxy\.com

7、group:获取子模式(组)的匹配项

上面的函数中,只有match、search有group方法,其他的函数没有。

import re

pat = re.compile(r'www\.(.*)\.(.*)')  

#用()表示1个组,2个组

m = pat.match('www.dxy.com')

print(m.group())

#默认为0,表示匹配整个字符串。结果:www.dxy.com

print(m.group(1))

#返回给定组1匹配的字符串。结果:dxy

print(m.group(2))

#返回给定组2匹配的字符串。结果:com

8、    start:给定组匹配项的开始位置

import re

pat = re.compile(r'www\.(.*)\.(.*)')

m = pat.match('www.dxy.com')

print(m.start(2)) #组2开始的索引,结果:8

9、end:给定组匹配项的结束位置

import re

pat = re.compile(r'www\.(.*)\.(.*)')

m = pat.match('www.dxy.com')

print(m.end(2))  #组2结束的索引。结果:11

10、span:给定组匹配项的开始结束位置

import re

pat = re.compile(r'www\.(.*)\.(.*)')

m = pat.match('www.dxy.com')

print(m.span(2))  

#组2的开始、结束的索引。结果为(8,11)

 

 

 

 

posted @ 2017-11-09 20:02  xsan  阅读(246)  评论(0编辑  收藏  举报