史上最全 Python Re 模块讲解(一)
日期: 2019-07-10 分类: 跨站数据 293次阅读
re模块下的函数
compile(pattern):创建模式对象
import re
pat=re.compile( A )
m=pat.search( CBA ) #等价于 re.search( A , CBA )
print m
<_sre.SRE_Match object at 0x9d690c8> #匹配到了,返回MatchObject(True)
m=pat.search( CBD )
print m
none
search(pattern,string):在字符串中寻找模式
m = re.search( asd , ASDasd )
print m
<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
m = re.search( asd , ASDASD )
print m
None #没有匹配到,返回None(False)
match(pattern,string):在字符串开始处匹配模式
m = re.search( asd , ASDasd )
print m
<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
m = re.search( asd , ASDASD )
print m
None #没有匹配到,返回None(False)
# 等价于
pat=re.compile( a )
print pat.match( Aasd )
None
printpat.match( aASD )
<_sre.SRE_Match object at 0xb72cd6e8>
# 上面的函数返回都可以在if条件语句中进行判断:
if pat.search( asd ):
print OK
OK #找到返回
if re.search( a , ASD ):
print "OK"
#没有找到
split(pattern,string):根据模式分割字符串,返回列表
re.split( , , a,s,d,asd )
[ a , s , d , asd ] #返回列表
pat = re.compile( , )
pat.split( a,s,d,asd )
[ a , s , d , asd ] #返回列表
re.split( [, ]+ , a , s ,d ,,,,,asd ) #正则匹配:[, ]+,后面说明
[ a , s , d , asd ]
re.split( [, ]+ , a , s ,d ,,,,,asd ,maxsplit=2) # maxsplit 最多分割次数
[ a , s , d ,,,,,asd ]
pat = re.compile( [, ]+ ) #正则匹配:[, ]+,后面说明
pat.split( a , s ,d ,,,,,asd ,maxsplit=2) # maxsplit 最多分割次数
[ a , s , d ,,,,,asd ]
findall(pattern,string):列表形式返回匹配项
re.findall( a , ASDaDFGAa )
[ a , a ] #列表形式返回匹配到的字符串
pat = re.compile( a )
pat.findall( ASDaDFGAa )
[ a , a ] #列表形式返回匹配到的字符串
pat = re.compile( [A-Z]+ ) #正则匹配:[A-Z]+ 后面有说明
pat.findall( ASDcDFGAa )
[ ASD , DFGA ] #找到匹配到的字符串
pat = re.compile( [A-Z] )
pat.findall( ASDcDFGAa ) #正则匹配:[A-Z]+ 后面有说明
[ A , S , D , D , F , G , A ] #找到匹配到的字符串
pat = re.compile( [A-Za-z] ) #正则匹配:[A-Za-z]+ 匹配所有单词,后面有说明
pat.findall( ASDcDFGAa )
[ A , S , D , c , D , F , G , A , a ]
sub(pat,repl,string) :用repl替换 pat匹配项
(留的是中间的,因为中间在中心)
re.sub( a , A , abcasd ) #找到a用A替换,后面见和group的配合使用
AbcAsd
pat = re.compile( a )
pat.sub( A , abcasd )
AbcAsd
pat=re.compile(r www.(.*)..{3} ) #正则表达式
#在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转译反斜杠 。
#例如, 在raw string中,是两个字符,和n, 而不会转译为换行符。
#由于正则表达式和 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上 r 。
#与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。
#假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":
#前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
#Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。
#同样,匹配一个数字的"\d"可以写成r"d"。
#有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
#不是说 加了r 就没有转译功能,好乱,就直接记住1句话:
#当一个字符串使用了正则表达式后,最好在前面加上 r ,这样你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观
pat.match( www.dxy.com ).group(1)
dxy
re.sub(r www.(.*)..{3} ,r , hello,www.dxy.com )
pat.sub(r , hello,www.dxy.com )
hello,dxy
# r 1 是第一组的意思
#通过正则匹配找到符合规则的"www.dxy.com" ,取得 组1字符串 去替换 整个匹配。
pat=re.compile(r (w+) (w+) ) #正则表达式
s= hello world ! hello hz !
pat.findall( hello world ! hello hz ! )
[( hello , world ), ( hello , hz )]
pat.sub(r ,s) #通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。
world hello!hz hello!
escape(string) :对字符串里面的特殊字符串进行转义
re.escape( www.dxy.cn )
www\.dxy\.cn #转义
上面的函数中,只有match、search有group方法,其他的函数没有。
函数的方法
group:获取子模式(组)的匹配项
---------------------------------------------------------------
注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
---------------------------------------------------------------
pat = re.compile(r www.(.*).(.*) ) #用()表示1个组,2个组
m = pat.match( www.dxy.com )
m.group() #默认为0,表示匹配整个字符串
www.dxy.com
m.group(1) #返回给定组1匹配的子字符串
dxy
m.group(2)
com
start:给定组匹配项的开始位置
m.start(2) #组2开始的索引
8
```python
**<font color='green'>end:给定组匹配项的结束位置**
m.end(2) #组2结束的索引
11
**<font color='green'>span:给定组匹配项的开始结束位置**
m.span(2) #组2开始、结束的索引
(8, 11)
未完待续
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐