Python模块之RE

    这个模块跟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()

   其它的略...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值