复习了下正则表达式的一般用法,足够cover日常需要了。软件 RegexBuddy非常好用,可以实时显示正则匹配效果,方便地用于测试。
例如,两个正则表达式满足其中一个就可。
start|end //匹配start或者end英文句号(.)可以匹配除了换行符(\n)以外的任何字符。
a.t //at之间任何字符都能匹配,例如a1t、aat、a.t等^匹配一行的头部 $匹配一行的末尾 \b匹配一个单词的边界 \B匹配不是一个单词的边界,即在单词头尾间的情况
例如,字符串为:apple apple apple
^apple //匹配第一个apple apple$ //匹配最后一个apple the //任何包含the的字符串 \bthe //任何以the开头的字符串 the\b // 任何以the结尾的字符串 \bthe\b //仅仅匹配the这个单词 \Bthe //同\bthe相反的意思,任何不是以the开头的字符串.虽然可以表示任意字符,但有时候需要限定在某些范围内的字符。
2[abc] //匹配2a,2b,2c [ab][cd] //匹配ac,ad,bc,bd [0-9] //匹配一个0至9的数字 [^\t\n] //不匹配\t或\n(*)星号将匹配其左边的正则表达式出现0次或多次的情况 (+)加号将匹配1次或者多次的情况 (?)问号将匹配0次或多次的情况 ({})大括号里是一个值或逗号分隔的两个值。例如{3}表示精确匹配前面的正则表达式出现3次,{1,5}表示精确匹配前面的正则表达式出现1至5次
需要导入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']还有一些高级用法,实际用到时过去查。一些资料: 正则表达式30分钟入门教程: http://deerchao.net/tutorials/regex/regex.htm 正则表达式– 语法| 菜鸟教程: http://www.runoob.com/regexp/regexp-syntax.html