#正则表达式是一个特殊字符序列,能帮助用户检查一个字符串是否与某种模式匹配,从而达成快速检索或替换符合某个模式、规则的文本。例如,可以在文档中使用一个正则表达式表达式表示特定文字,然后将其全部删除或替换成别的文字。
#Python自1.5版本起增加了re模块,它提供了perl风格的正则表达式模块,re模块使Python语言拥有全部的正则表达式功能。compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表达式匹配和替换。
#re模块提供与compile的函数功能完全一致的函数。这些函数使用模式字符串作为第一个参数。
#字符串是编程时设计最多的数据结构,对字符串操作的需求几乎无处不在。
#在开始后续介绍前,我们先看表1和表2,表1展示了一下特殊字符在正则表达式的独特应用,表2展示某些字符类在正则表达式中的应用。
表1-特殊字符类在正则表达式中的应用
表2-字符类在正则表达式中的应用
#通过表1和表2可以看到,一些特殊字符虽然很简短,但功能非常强大。下面介绍一些更详尽的正则表达式的使用方式。
#例如,我们要判断一个字符串是否合法的Email地址,可以用编程的方式提取@前后的子串,再分别判断是否是单词和域名。不过这样做不但需要写一堆麻烦的代码,而且写处理的代码难以重复使用,面对不同的需求可能需要使用不同的代码实现。
#正则表达式是匹配字符串的强有力的武器。正则表达式的设计思想使用描述性语言为字符串定义一个规则,凡是符合规则的字符串,我们就认为“匹配”,否则就不匹配。正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,匹配就成功:一旦有匹配不成功的字符,匹配就失败。
#用正则表达式判断一个字符串是否是合法的Email的方法是:
①:创建一个匹配Email的正则表达式。
②:用该正则表达式匹配用户的输入从而判断是否合法。
#下面我们介绍如何使用正则表达式描述字符。
#在正则表达式中,如果直接给出字符,就是精确匹配。从表1可知,用\d可以匹配一个数字,用\w可以匹配一个字母或数字,例如:
1)、‘00\d‘可以匹配‘007’,但无法匹配‘00q’。
2)、‘\d\d\d‘可以匹配‘123‘。
3)、‘\w\w\d‘可以匹配‘py3‘。
4)、.可以匹配任意字符,所以‘py.‘可以匹配‘pyc‘、‘pyo‘、‘py!‘等。
#在正则表达式中,要匹配变长的字符,用*表示任意个数的字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n~m个字符。
#下面我们来看一个更复杂的例子:\d{3}\s+d{3,8}。该字符串从左带右解读如下:
#\d{3}表示匹配3个数字,如‘010‘;\s可以匹配一个空格(包括Tab等空白符),所以\s+表示至少有一个空格,如匹配‘ ‘、‘ ‘等;\d{3,8}表示3~8个数字,如‘1234567’。
#综上所述,正则表达式可以匹配以任意个数的空格隔开的带区号的电话号码。
#如果要匹配‘010-12345‘这样的号码呢?由于‘-‘是特殊字符,在正则表达式中要用‘\‘转义,因此用正则表达式表示为\d{3}\-\d{3,8}。
#我们前面讨论了正则表达式的基本使用方法,不过如果需要匹配带有字符串的字符串(‘010-12345‘),前面使用的方式就做不到了,在此我们继续讨论一下更复杂的匹配方式。
#要更精确地匹配,可以用[]表示范围,例如:
1)、[0-9a-zA-Z\_]用以匹配数字、字母或下划线,这种方式可以在一些场合做输入值或命名的合法性检验。
2)、[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或下划线组成的字符串,如‘a100‘‘0_Z‘‘Py3000‘。这种方式可以检验一个字符串是否包含数字、字母或下划线。
3)、[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个数字、字母或下划线组成的字符串,也就是Python的合法变量。
4)、[a-zA-Z\_][0-9a-zA-Z\_]{0,19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
5)、A|B用于匹配A或B,如(P|p)ython可以匹配‘Python‘或‘python‘。
6)、^表示行的开头,^\d表示必须以数字开头。
7)、$表示行的结束,\d$表示必须以数字结束。