泰勒python笔记二:正则表达式
来源:互联网 发布:知在文言文中的意思 编辑:程序博客网 时间:2024/06/06 13:05
正则表达式是一种用来匹配字符串的工具。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
1.直接给出字符,就是精确匹配。
2.用\d可以匹配一个数字,\w可以匹配一个字母或数字,\b可以匹配单词分界或退格(匹配字符边界),\t可以匹配制表符tab,\r可以匹配回车符,\s匹配空格;\W表示匹配非字母数字,\S匹配非空格, \D匹配非数字,\B表示不含开头和结尾(匹配非字符边界的某个位置),. 可以匹配任意字符。
3.要匹配变长的字符,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符。
4.特殊字符,在正则表达式中,要用’\’转义。
5.[]表示匹配范围,比如:
[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如’a100’,’0_Z’,’Py3000’等等;
[a-zA-Z_][0-9a-zA-Z_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
[a-zA-Z_][0-9a-zA-Z_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
6.A|B可以匹配A或B,所以[A|a]bc可以匹配’Abc’或者’abc’。
^表示行的开头,^\d表示必须以数字开头。
$表示行的结束,\d$
表示必须以数字结束。
你可能注意到了,^abc也可以匹配’abcd’,但是^abc$就变成了整行匹配,就只能匹配’abc’了。
常见用法补充:
(abc){3} 表示字符串“abc”重复3次[^a]指除“a”外的任意字符| 匹配前面或后面的表达式(逻辑或){n,} 最少匹配前面表达式n次(上限不定)“\b(\w+)\b\s+\1\b”中的数字“1”引用前面的“(\w+)”“(?<Word>\w+)”中把“\w+”定义为组,组名为“Word”“\b\w+(?=ing\b)”定位“ing”前面的字符串“(?<=\bsub)\w+\b”定位“sub”后面的字符串“\w*d(?!og)\w*”,“dog”不符合,“do”符合,!表示取非
Python提供re模块,包含所有正则表达式的功能。
由于python字符串本身也用\转义,所以最好用 r’ ’ 自然字符串表示,使其中的转义失效。
>>>import re>>>re.match(r'^\d{3}\-\d{3,10}$', '010-1234567')#返回<_sre.SRE_Match object at 0x1026e17c9>,匹配成功>>>re.match(r'^\d{3}\-\d{3,10}$', '010 1234567')#返回None,匹配失败#所以代码中写法如下test = '待匹配字串'if re.match(r'正则表达式', test): print 'ok'else: print 'failed'#切分字符串,split()支持正则匹配re.split(r'[\s\,\;]+', 'a,b;; c d')['a', 'b', 'c', 'd']
正则表达式支持提取子串。用()表示的就是要提取的分组(Group)。^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码。
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')>>> m<_sre.SRE_Match object at 0x1026fb3e8>>>> m.group(0)'010-12345'>>> m.group(1)'010'>>> m.group(2)'12345'#group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
>>>re.match(r'^(\d+)(0*)$', '102300').groups()('102300', '')#由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。>>>re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')#采用非贪婪匹配(尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配。
编译问题(影响效率):re模块内部会先编译正则表达式,不合法会报错,然后采取匹配字符串。对于频繁调用的表达式应该预编译成Regular Expression对象。
re_phone = re.compile(r'^(\d{3})-(\d{3,8})$')#预编译 re_phone.match('010-12345').groups()
最后声明,这些基本照搬廖雪峰老师的python教程,真的非常棒,我写在这里是为了帮自己加深印象,方便复习查找。
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
- 泰勒python笔记二:正则表达式
- python学习笔记二(正则表达式)
- Python正则表达式二
- 【Python】Python学习笔记(二)——正则表达式
- Python 正则表达式笔记
- python正则表达式笔记
- python正则表达式笔记
- python正则表达式笔记
- python笔记---正则表达式
- Python笔记-正则表达式
- Python正则表达式(二)
- python 正则表达式之二
- python正则表达式(二)
- Python正则表达式之二
- python正则表达式(二)
- Python正则表达式(二)
- Python:正则表达式(二)
- python正则表达式(二)
- jquery ui sortable
- 【代码笔记】iOS-钢琴小游戏
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- 重温Maven--eclipse中使用Maven
- 监听contentprovider中数据变化
- 泰勒python笔记二:正则表达式
- 支持向量机-SVM
- leetcode随笔VI
- nginx-备注
- android 4.4以上项目的选择文件和从图库中选择图片
- 3-7 关于浮动之所得
- SAP FTP上传出现的几个小问题归纳
- loadrunner11录制手机app
- 真机测试 之 证书测试