python 基础学习 正则表达式2(使用)
2015-06-03 13:25
911 查看
~使用正则表达式
- re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配。
#如果经常使用,建议编译 compile
范例:
----------------------------------------------------------------------------------------------------------
-re.compile()也接受可选的标志参数,关注re.I
-常用来实现不同的特殊功能和语法变更
范例:
----------------------------------------------------------------------------------------------------------
执行匹配:
-`RegexObject` 实例有一些方法和属性,完整的列表可查阅Python Library Reference
<
如果没有匹配到的话,match()和search将返回None
如果成功的话,就会返回一个`MatchObject`实例。
范例:
使用match
group() :返回对象
-模块级函数
-re模块也提供了顶级函数调用match()、search()、subn()、split()、findall()等
sub、subn :正则替换
范例:
#查看更多正则函数:
>>> dir(re)
#查看帮助:
help(re.error)
.编译标志-flags
本文出自 “思想大于技术” 博客,谢绝转载!
- re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配。
#如果经常使用,建议编译 compile
范例:
>>> r1=r'^\d{3,4}-?\d{8}' >>> re.findall(r1,'010-12345678') ['010-12345678'] >>> p_tel=re.compile(r1) #正则编译,变为对象,利用re模块里的complie方法对r1编译; >>> p_tel <_sre.SRE_Pattern object at 0x7f2e016173d0> #正则对象 >>> p_tel.findall('01035689125') ['01035689125']#编译的正则比未编译的正则效率高
----------------------------------------------------------------------------------------------------------
-re.compile()也接受可选的标志参数,关注re.I
-常用来实现不同的特殊功能和语法变更
范例:
>>> csvt_re=re.compile(r'csvt',re.I) #在编译过程中,添加正则属性re.I(不区分大小写) >>> csvt_re.findall('csvtCSVT') ['csvt', 'CSVT']#注意:字符串前添加'r',反斜杠就不会被任何特殊方式处理
----------------------------------------------------------------------------------------------------------
执行匹配:
-`RegexObject` 实例有一些方法和属性,完整的列表可查阅Python Library Reference
<
方法/属性 | 作用 |
match() | 决定RE是否在字符串刚开始的位置匹配 |
search() | 扫描字符串,找到这个RE匹配的位置 |
findall() | 找到RE匹配的所有子串,并把它作为一个列表返回 |
finditer() | 找到RE匹配的所有子串,并把它作为一个迭代器返回 |
如果成功的话,就会返回一个`MatchObject`实例。
范例:
使用match
>>> csvt_re=re.compile(r'csvt',re.I) >>> csvt_re.match('csvt hello') <_sre.SRE_Match object at 0x7f2e01620920> #匹配成功。返回MacthObject >>> csvt_re.match(' hello') #匹配失败,返回空 >>> csvt_re.match(' hello CSVT') #返回为空,注意match匹配的是字符串开始的位置如果使用search
>>> csvt_re.search('hello CSVT') <_sre.SRE_Match object at 0x7f2e01620988> >>> csvt_re.search('hello CSvT') <_sre.SRE_Match object at 0x7f2e01620920> #注意此处为不区分大小写,且是全表扫描使用findall
>>> csvt_re.findall('hello CSvT hello CSvt csvt') ['CSvT', 'CSvt', 'csvt'] #返回为列表使用finditer
>>> csvt_re.finditer('hello CSvT hello CSvt csvt') <callable-iterator object at 0x7f2e01634350> #返回为迭代器的对象 >>> csvt_re.findall('csvT') ['csvT']match() MatchObject实例方法
方法/属性 | 作用 |
group() | 返回被RE匹配的字符串 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元组包含匹配(开始,结束)的位置 |
>>> csvt_re=re.compile(r'csvt',re.I) >>> x =csvt_re.match('CSVT,hello') >>> x <_sre.SRE_Match object at 0x7fa4f527f920> >>> x.group() 'CSVT'----------------------------------------------------------------------------------------------------------
-模块级函数
-re模块也提供了顶级函数调用match()、search()、subn()、split()、findall()等
sub、subn :正则替换
范例:
#单纯的字符串替换 >>> kong = 'hello nihao' >>> kong.replace('nihao','word') 'hello word' #使用正则 >>> rs = r'n...o' >>> kong = 'hello nihao naabo nccco' >>> re.sub(rs,'bbb',kong) 'hello bbb bbb bbb' #匹配替换所有 >>> re.subn(rs,'bbb',kong) ('hello bbb bbb bbb', 3) #sub 和 subn 的区别 ,替换计数split() :正则切割
#字符切割 >>> ip = '1.2.3.4' >>> ip.split('.') ['1', '2', '3', '4'] >>> s = "123+456-789*000" >>> re.split(r'[\+\-\*\/]',s) ['123', '456', '789', '000']
#查看更多正则函数:
>>> dir(re)
#查看帮助:
help(re.error)
.编译标志-flags
标志 | 含义 |
DOTALL,S | 使.匹配包括换行在内的所有字符 |
范例: | >>> import re >>> r1=r'csvt.net' >>> re.findall(r1,'csvt.net') ['csvt.net'] >>> re.findall(r1,'csvtnnet') ['csvtnnet'] >>> re.findall(r1,'csvtxnet') ['csvtxnet'] >>> re.findall(r1,'csvt\nnet') [] >>> re.findall(r1,'csvt\nnet',re.S) ['csvt\nnet'] >>> re.findall(r1,'csvt\tnet',re.S) ['csvt\tnet'] |
IGNORECASE,I | 使匹配对大小写不敏感 |
范例: | >>> import re >>> r2 = r'csvt' >>> re.findall(r2,'CSVT csvt',re.I) ['CSVT', 'csvt'] >>> re.findall(r2,'CSVT csvt') ['csvt'] |
LOCALE,L | 做本地化识别(locale-aware)匹配.语法等 |
MULTILINE,M | 多行匹配,影响^和$ |
范例: | >>> s = ''' hello csvt ... csvt hellp ... hello csvt hello ... csvt hehe ... ''' >>> r1 = r'^csvt' #正则定义注意^ >>> re.findall(r1,s) [] #无法匹配 >>> s ' hello csvt\ncsvt hellp\nhello csvt hello\ncsvt hehe\n' >>> re.findall(r1,s,re.M) #使用re.M ['csvt', 'csvt'] |
VERBOSE,X | 能够使用REs的verbose状态,使之被组织得更清晰易懂 |
范例: | >>> r1 = r''' ... \d{3,4} ... -? ... \d{8} ... $ ... ''' >>> re.findall(r1,'010-12345678',re.X) ['010-12345678'] >>> re.findall(r1,'010-12345678') [] #问题:上述正则同时出现^,该如何匹配 |
相关文章推荐
- 在 Mac OS X 10.10 安装 pyenv 的一个小坑
- python类基本语法笔记
- Python基础 语法特别注意笔记(和Java相比)
- Python基础 语法特别注意笔记(和Java相比)
- wxPython定时器wx.Timer简单应用实例
- Python基于DES算法加密解密实例
- Python使用minidom读写xml的方法
- ipython 学习笔记 2 network graph--NetworkX
- wxpython基本控件-静态文本控件
- Python实现程序的单一实例用法分析
- python简单获取本机计算机名和IP地址的方法
- python的udp服务器多进程编程
- Python自动调用IE打开某个网站的方法
- ipython 学习笔记 1 基础
- Python找出文件中使用率最高的汉字实例详解
- Python实现Windows上气泡提醒效果的方法
- 股票模拟买卖
- Python捕捉和模拟鼠标事件的方法
- Python while、for、生成器、列表推导等语句的执行效率测试
- windows下python安装Numpy、Scipy、matplotlib模块