这个模块跟PERL的正则表达比较类似。在PYTHON中无论是正则表达示还是字符串都可以用UNICODE或者8位字符串进行搜索。
在本模块中用'r'进行原始字符的匹配,如字符串"abcd/na",如果要把转义字符也匹配进去,在不用"r"是会像这样,"abcd//na",
如果用'r',则是r'abcd/na'就可以了。
一、正则表达式语法
正则表达式可以包括普通或特殊字符。如“|”,“(”等就是特殊字符。不过它不能直接包括空字节,但可以用/number,比如'/x00'(没试成功)
>>> import string,re
>>> keys=string.ascii_letters+' ab'
>>> print keys
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ab
>>> if re.findall(r'',keys):
print 'ok'
ok
常用语法图如下:
符号 | 匹配 |
. (dot) | 默认情况下,任意单一字符(不包括换行)。特殊情况下包括换行符 |
/d | 任意一位数字 |
[A-Z] | A 到 Z中任意一个字符(大写) |
[a-z] | a 到 z中任意一个字符(小写) |
[A-Za-z] | a 到 z中任意一个字符(不区分大小写) |
+ [] | 匹配一个或更多 (例如, /d+ 匹配一个或 多个数字字符) [abc]匹配'a','b','c',[a-zA-Z]匹配所有字符,[^a-z]匹配非a-z,[z^z]匹配a^z |
[^/]+ $ | 一个或多个不为‘/’的字符或者标记字符串开始 标记字符串结束 |
? | 零个或一个之前的表达式(例如:/d? 匹配零个或一个数字,ab?匹配'a'或'ab') |
* a{6} a{4,} | 匹配0个或更多 (例如, /d* 匹配0个 或更多数字字符) 只匹配6个a,而不是其它个数 匹配前面有四个a 的字符串 |
{1,3} {m,n}? | | 介于一个和三个(包含)之前的表达式(例如,/d{1,3}匹配一个或两个或三个数字) 如'aaaaaa',a{3,5}匹配5个'a',a{3,5}?匹配3个字符 abc|abd,匹配abc或者abd |
其它的得参考自带文档大致如下:
/d 匹配数字 等价于[0-9]
/D 匹配非数字 等价于[^0-9]
/w 匹配字母和数字 等价于[a-zA-Z0-9]
/W 匹配非英文字母和数字 等价于[^a-zA-Z0-9]
/s 匹配间隔符 等价于[ /t/r/n/f/v](前面有个空格)
/S 匹配非间隔符 等价于[^ /t/r/n/f/v]
/A 匹配字符串开头 与'^'区别是,'/A'只匹配整个字符串开头,即使在re.M模式下,也不会匹配其它行的行首
/Z 匹配字符串结尾 与'$'的区别如上
/b 匹配单词边界(不会包括分界符)
/B 匹配非边界
(?:) 无捕获组,即将一部分规则作为一个整体对其进行某些操作,如在字符s中指定查多个重复的'bcd',re.findall( r’/b(?:bcd)+/b’ , s )
(?<=…) 括号中’…’只能是常量,代表你希望匹配的字符串的前面应该出现的字符串
(?=…) 同上,代表你希望匹配的字符串的后面应该出现的字符串
二、自带方法
1、re.compile(pattern[, flags]),对pattern进行预处理。第二参数pattern为需匹配的字符串,第二个参数为标签,如下:
re.I 忽略大小写,当设置了本地时无效
re.L 使/w, /W, /b, /B, /s和/s根据本地设置而定
re.M 匹配多行
re.S 对“.”使用,使它可以匹配换行符
re.U UNICODE
re.X 允许注释
当需要多次使用pattern时,如果不进行预处理会很慢。
2、re.search(pattern,string[,flags]) 第二个参数为目标字符串
3、re.match(pattern,string[,flags]) 也是在string查找pattern,但与search()的区别是,match()只在目标串头找,而search()则在整串中找
4、re.split(pattern, string[, maxsplit=0]) 对string进行pattern切片。例:对空格进行切片
>>> re.split('/s','i am a boy!')
['i', 'am', 'a', 'boy!']
5、re.findall(pattern, string[, flags]) 在string中循环匹配pattern,flags如complie()
其它的略...