复习了下正则表达式的一般用法,足够cover日常需要了。软件 RegexBuddy非常好用,可以实时显示正则匹配效果,方便地用于测试。
1.逻辑或
例如,两个正则表达式满足其中一个就可。
start|end //匹配start或者end
2.匹配任意单个字符
英文句号(.)可以匹配除了换行符(\n)以外的任何字符。
a.t //at之间任何字符都能匹配,例如a1t、aat、a.t等
3.一行起始或一个字符串的头尾
^匹配一行的头部
$匹配一行的末尾
\b匹配一个单词的边界
\B匹配不是一个单词的边界,即在单词头尾间的情况
例如,字符串为:apple apple apple
^apple //匹配第一个apple
apple$ //匹配最后一个apple
the //任何包含the的字符串
\bthe //任何以the开头的字符串
the\b // 任何以the结尾的字符串
\bthe\b //仅仅匹配the这个单词
\Bthe //同\bthe相反的意思,任何不是以the开头的字符串
4.字符集
.虽然可以表示任意字符,但有时候需要限定在某些范围内的字符。
2[abc] //匹配2a,2b,2c
[ab][cd] //匹配ac,ad,bc,bd
[0-9] //匹配一个0至9的数字
[^\t\n] //不匹配\t或\n
5.存在和频率的限定
(*)星号将匹配其左边的正则表达式出现0次或多次的情况
(+)加号将匹配1次或者多次的情况
(?)问号将匹配0次或多次的情况
({})大括号里是一个值或逗号分隔的两个值。例如{3}表示精确匹配前面的正则表达式出现3次,{1,5}表示精确匹配前面的正则表达式出现1至5次
6.一些特殊字符
\d //匹配任一十进制数字,\D匹配任何非十进制数
\w //匹配任何字母数字,同[A-Za-z0-9]。\W与之相反
\s 匹配任何空格表示字符,同[\n\t\r\v\f]。\S与之相反
7.python使用正则表达式
需要导入re模块,search方法返回第一次匹配的结果
>>> import re
>>>
>>> pt = 'a[0-9]b'
>>> m = re.search(pt,'aaa abb a1b ab a2b')
>>> if m is not None:
... print m.group()
... else:
... print 'None'
...
a1b
>>>
使用findall()查询字符串中某个正则表达式匹配的全部出现情况,保存为list返回
>>> re.findall( 'a[0-9]b','aaa abb a1b ab a2b')
['a1b', 'a2b']
finditer()是一个与findall()类似但是更节省内存的变体,返回一个迭代器。
>>> for i in re.finditer(pt, 'aaa abb a1b ab a2b'):
... print i.group(), i.span()
...
a1b (8, 11)
a2b (15, 18)
正则表达式的编译时必需的,那么使用预编译是可以提升执行性能的。
>>> regex = re.compile(r'a[0-9]b')
>>> print regex.findall('aaa abb a1b ab a2b')
['a1b', 'a2b']
8.其它
还有一些高级用法,实际用到时过去查。一些资料:
正则表达式30分钟入门教程:
http://deerchao.net/tutorials/regex/regex.htm
正则表达式– 语法| 菜鸟教程:
http://www.runoob.com/regexp/regexp-syntax.html