Skip to main content

Python 入门基础知识- 常用正则表达式分析

Python 入门基础知识- 常用正则表达式分析

常用正则表达式分析

使用正则表达式可以简化程序设计。

例如在一个文本文件中包含一些联系人的手机号码,如果需要将使用联通和移动的号码区分出来,可以使用正则表达式分别匹配。

对于联通的号码,第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
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/49