5.Python正则表达式幻灯片
- 格式:ppt
- 大小:1.40 MB
- 文档页数:24
【Python第59课】正则表达式(5)20150120059【Python 第59课】正则表达式(5)听说有人已经开始国庆假期了,甚至还有人中秋之后就请了年假一休到底,表示羡慕嫉妒恨!今天发完这课,我也要进入休假状态,谁也别拦着我。
来说上次的习题:(021)88776543***********************************一个可以匹配出所有结果的表达式是\(?0\d{2,3}[) -]?\d{7,8}解释一下:\(?()在正则表达式里也有着特殊的含义,所以要匹配字符"(",需要用"\("。
?表示这个括号是可有可无的。
0\d{2,3}区号,0xx或者0xxx[) -]?在区号之后跟着的可能是")"、" "、"-",也可能什么也没有。
\d{7,8}7或8位的电话号码可是,这个表达式虽然能匹配出所有正确的数据(一般情况下,这样已经足够),但理论上也会匹配到错误的数据。
因为()应当是成对出现的,表达式中对于左右两个括号并没有做关联处理,例如************这样的数据也是符合条件的。
我们可以用正则表达式中的“|”符号解决这种问题。
“|”相当于python中“or”的作用,它连接的两个表达式,只要满足其中之一,就会被算作匹配成功。
于是我们可以把()的情况单独分离出来:\(0\d{2,3}\)\d{7,8}其他情况:0\d{2,3}[ -]?\d{7,8}合并:\(0\d{2,3}\)\d{7,8}|0\d{2,3}[ -]?\d{7,8}使用“|”时,要特别提醒注意的是不同条件之间的顺序。
匹配时,会按照从左往右的顺序,一旦匹配成功就停止验证后面的规则。
假设要匹配的电话号码还有可能是任意长度的数字(如一些特殊的服务号码),你应该把|\d+这个条件加在表达式的最后。
如果放在最前面,某些数据就可能会被优先匹配为这一条件。
Python正则表达式完全讲解一般字符对于绝大多数的字符来说,它们都只是简单地匹配自己。
如>>>p=r e.c o m p i l e('h i')#匹配h i>>>m=p.s e a r c h('v e r y,h i g h')#>>>m.s p a n()#找到了位置(5,7)在正则表达式中,如下的字符是具有特殊含义的.^$*+?{[]\|()关于它们的含义,以下我们逐个用例子阐述。
\象其它大部分语言一样,'\'表示转义。
为了在你的字符串中匹配如上的特殊字符,你就需要用到它。
还有就是一些常见的定义,如'\r','\n','\f','\t','\b'等。
如>>>p=r e.c o m p i l e(r'\.e')#找字符'.'后面紧跟字符'e'>>>m=p.s e a r c h('a.e x e')>>>m.s p a n()(1,3).字符“.”用于匹配任意的非换行字符,在wi n d o ws下为'\n',在u n i x下为'\r\n'。
在P y t h o n中,如果你在构造表达式时指定参数D O T A L L的话,字符也可以匹配换行。
>>>p=r e.c o m p i l e(r'.')#找任意非\n的字符>>>p.s e a r c h('a b c').s p a n()(0,1)>>>p.s e a r c h('\n c b a').s p a n()(1,2)>>>p=r e.c o m p i l e(r'.',r e.D O T A L L)#找任意字符,包括\n在内>>>p.s e a r c h('\n c b a').s p a n()(0,1)|字符|表示选择,匹配它两边的任意一种。