Python学习 (九 正则表达式)
来源:互联网 发布:啊哈算法 在线阅读 编辑:程序博客网 时间:2024/06/15 00:31
前言:正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
re.match函数
re
模块使 Python 语言拥有全部的正则表达式功能。re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,就返回none,也含着True
和False
的判断。
re.match(pattern, string, flags=0)#有以下使用方式test = '用户输入的字符串'if re.match(r'正则表达式', test): print 'ok'else: print 'failed'
pattern是匹配的正则表达式,string是要匹配的字符串,flags作为默认参数是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
由于Python的字符串本身也用\
转义,所以要特别注意:
s = 'ABC\\-001' # Python的字符串# 对应的正则表达式字符串变成:# 'ABC\-001'
强烈建议使用Python的r前缀,就不用考虑转义的问题了:
s = r'ABC\-001' # Python的字符串# 对应的正则表达式字符串不变:# 'ABC\-001' 不过有一个问题是单双引号,这个还是得根据实际情况判别
切分字符串
用正则表达式切分字符串比用固定的字符更灵活,使用re.split(pattern,str)
无论多少个空格或者特殊字符都可以正常切割,也就是去掉:
>>> re.split(r'[\s\,\;]+', 'a,b;; c d')['a', 'b', 'c', 'd']
这个可以用于标签规范化。
分组
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()
表示的就是要提取的分组(Group)。比如:
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') #两个分组>>> m<_sre.SRE_Match object at 0x1026fb3e8>>>> m.group(0) #0始终代表原始字符串'010-12345'>>> m.group(1) #依此类推'010'>>> m.group(2)'12345'
然而,用正则表达式无法很好的识别日期,时间却没有问题。
贪婪匹配
贪婪匹配指的是尽可能多的匹配。
>>> re.match(r'^(\d+)(0*)$', '102300').groups()('102300', '') #本是任意个0,却啥都没有了
只要加一个?
就可以取消贪婪匹配了:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')
编译
当我们在Python中使用正则表达式时,re模块内部会干两件事情:
- 编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
- 用编译后的正则表达式去匹配字符串。
为了提高效率,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:
>>> import re# 编译:>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')# 使用:>>> re_telephone.match('010-12345').groups() #其实就省去了再输一次正则('010', '12345')>>> re_telephone.match('010-8086').groups()('010', '8086')
关于正则表达式还有很多需要讲的内容,通过下面这一张图再配合上面讲的知识,基本可以掌握大多数的用法了。转自http://www.zuidaima.com/share/1935690684959744.htm
0 0
- Python学习 (九 正则表达式)
- Python爬虫包 BeautifulSoup 学习(九) 正则表达式与Lambda表达式
- Linux学习笔记(九)正则表达式
- Python基础教程(九):面向对象、正则表达式
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- Python正则表达式学习
- Python正则表达式学习
- Python学习--正则表达式
- python正则表达式学习
- Python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- 第七届河南省程序设计大赛
- Codeforces Round #326 (Div. 1)A. Duff and Weight Lifting
- Java千百问_03基础语法(012)_transient关键字有什么用
- redis事件
- VideoView播放视频异常MediaPlayer: Error (1,-2147483648)
- Python学习 (九 正则表达式)
- UIResponder
- Zookeeper的安装配置及基本开发
- UVA 11752 The Super Powers(至少是两个正整数的幂的幂数)
- 构造方法
- zznu 1203: 做幻方
- SQL SERVER 2005命令行修改用户sa密码
- 一个新的开始,纪录点点滴滴
- 软件开发平台实现目标归纳