常用正则表达式分析
使用正则表达式可以简化程序设计。
例如在一个文本文件中包含一些联系人的手机号码,如果需要将使用联通和移动的号码区分出来,可以使用正则表达式分别匹配。
对于联通的号码,第3位是0到3中的一个数字,而移动则是4到9中的一个数字,可以根据此规则拍匹配。
如下正则表达式可以匹配联通手机号
13[0-3][0-9]{8}
其中13表示匹配手机号的前两位。[0-3]匹配手机号的第3位,表示0到3之间的任何一个数字。[0-9]{8}组合起来匹配手机号剩下的8位。
[0-9]表示0到9之间的任何一个数字,{8}表匹配[0-9]8次,也就是匹配任意一个8位数。
如下正则表达式可以匹配移动手机号
13[4-9][0-9]{8}
与联通匹配手机号正则不一样的地方就是第3位是用[4-9]。[4-9]表示4到9之间的任何一个数字
同样如果联系人的信息中还包含邮政编码,而又需要将其按地区区分的话也可以使用正则表达式。对于邮政编码的匹配相对简单一些,例如北京的邮政编码钱3位为100。
采用与匹配手机号同样的方式,只需在100之后匹配任意一个3位数,如下所示。
100[0]{3}
使用正则表达式匹配数字十分方便,但如果匹配字符串,则需要考虑较多的情况。例如,需要找出某一个文件中所有的网址则比较复杂。
以"http://www.python.org"为例,其可以分成4部分,首先是"http://",然后是"www",再就是站名"python",剩下的是后缀"org"。
可能有些网址书写完整,具有以上4部分。而有些网址则不规则,不含"http://"部分。
将"http://www"当做一个部分,其可能的情况为"http://www"或者"www",这一部分的正则表达式匹配可以如下
(http://www|www) # 使用"()"表示其为一个整体,使用"|"表示其中任何一个满足则匹配
中间的站名作为一部分,这部分可能为字母、数字或者"-",因此改部分的正则表达式匹配可以写成如下
[a-z0-9-]* # [a-z0-9-]表示字母、数字或者'-','*'表示匹配0个或者多个前边的字符
剩下的后缀,考虑到可能为两个或三个的字符,因此写成如下形式。
[a-z]{2,3} # {2,3} 表示匹配两次或三次,匹配由两个或三个字母组成
由于其中还包含".",而在正则表达式中其具有特殊含义,需要将其使用"\"转义。完整正则如下
(http://www|www)\.[a-z0-9]*\.[a-z]{2-3}
实例环境声明
# _*_ coding: utf-8 -*-
# version 2.7.13