码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习 之 正则表达式

时间:2015-06-22 21:59:37      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

1、简单的正则表达式

import re
s=rabc
re.findall(s,"aaaaaaaaaaaaaaa")   #结果为[]
re.findall(s,"abcaaaaaaaaaaaa")    #结果为[‘abc‘]
re.findall(s,"abcaaaaaabcaaaa")    #结果为[‘abc‘,‘abc‘]

2、元字符

[] :指定一个字符集  例如:r‘t[io]p‘  满足的字符串包括‘tip‘或‘top‘

  加上^表示取反  例如:r‘t[^io]p‘  满足的字符串包括除‘tip‘或‘top‘之外的字符串

^ :匹配行首  r‘^abc‘  r‘\^abc‘

$ :匹配行尾

\ :\d=[0-9],\D=[^0-9],\s=[\t\n\r\f\v],\S=[^\t\n\r\f\v],\w=[a-zA-Z0-9],\W=[^a-zA-Z0-9]

  \[或\\取消所有的元字符

. :匹配任意字符

* :匹配零次或多次

+ :匹配一次或多次

?  :匹配一次或零次  例如:r"^010-?\d{8}$"

r=r"ab+?"    #‘+?‘是最小匹配模式,非贪婪模式
re.findall(r,abbbbbbbb)  #结果是‘ab‘

 

{} :{m,n}最少重复m次,最多重复n次 {0,}=* {1,}=+ {0,1}=?

() :分组,经常和‘|’一起使用,例如email的正则表达式r‘\w{3}@\w+(\.com|\.cn)‘

  注意:findall匹配的正则表达式中有分组,先返回匹配分组中的数据

例如:

s=adjadlk hello src=csvt yes jojjlk  jlij hello src=python yes jopm
r1=rhello src=.+ yes
re.findall(r1,s)   #结果[‘hello src=csvt yes‘,‘hello src=python yes‘]
r1=rhello src=(.+) yes
re.findall(r1,s)   #结果[‘csvt‘,‘python‘]

|

3、正则表达式的编译

编译后的正则表达式效率比编译前的要高许多,例如:

#匹配电话号码
r1=r"\d{3,4}-?\d{8}"
p_tel=re.compile(r1)   #编译后的正则表达式效率要高很多
p_tel.findall(010-12345678)

编译时,可以加一些参数,用来实现特殊功能和语法变更,例如:

csvt_re=re.compile(rcsvt,re.I)   #re.I表示在编译时忽略大小写
csvt_re.findall(CSVT)  #结果是[‘CSVT‘]
csvt_re.findall(csvt)  #结果是[‘csvt‘]
csvt_re.findall(CsVt)  #结果是[‘CsVt‘]

4、执行匹配

(1)match():决定RE是否在字符串刚开始的位置匹配。未匹配,返回None;否则,返回MatchObject对象

   MatchObject实例方法

    group():返回被RE匹配的字符串

    start():返回匹配开始的位置

    end():返回匹配结束的位置

    span():返回一个元组包含匹配(开始,结束)的位置

  实际程序中,最常见的做法是将MatchObject保存在一个变量中,然后检查他是否为None

(2)search():扫描字符串,找到这个RE匹配的位置。未匹配,返回None;否则,返回MatchObject对象

(3)findall():找到RE匹配的所有子串,并把他们作为一个列表返回

(4)finditer():找到RE匹配的所有子串,并把他们作为一个迭代器返回

5、模块级函数:match()、search()、sub()、subn()、split()、findall()等

(1)sub()用法举例:

rs=rc..t
re.sub(rs,python,csvt caat cvvt cccc)  #结果‘python python python cccc‘

(2)subn()用法,返回值中比sub()多了一个数据,表示一共替换了多少次,比如

rs=rc..t
re.sub(rs,python,csvt caat cvvt cccc)  #结果(‘python python python cccc‘,3)

(3)split()的用法

s=121+334-34*33/44
re.split(r[\+\-\*/],s)  #结果[‘121‘,‘334‘,‘34‘,‘33‘,‘44‘]

6、编译标志-flags

技术分享

 

Python学习 之 正则表达式

标签:

原文地址:http://www.cnblogs.com/sunflower627/p/4593517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!