Python:正则表达式

发布时间:2017-09-03 12:26:28 作者:上海宙翔货物运输代理有限公司
Python:正则表达式

现实中,经常要做的一项任务,是在文本中检索某种模式。所谓模式,就是满足一定规则的字符串的总称,例如只由大写字母构成的单词就是一种模式,所有电子邮件的地址,也是一种模式。我们检索这样符合一定规则的字符串,按照之前字符串的知识,当然能设计出相关的函数,完成这些任务,可是当要检索的模式非常复杂时,设计这样的函数显然费时费力,那就需要一种高级的,便捷的模式检索的方法,帮助我们解决这个问题。

这也就引出了今天的主题——正则表达式。直观上讲,正则表达式就是一种特殊的字符串,它能够表达某种字符串组成的规则。从而根据这个规则,检索出符合规则的字符串。

正则表达式使用的特殊符号和字符

我们先不关心正则表达式是如何在Python中运作的,先看如何把我们要表达的规则写成一个正确的正则表达式。那就一定要明白各种特殊字符的含义。

特殊符号

仅有字母和数字构成的普通文本。
只能匹配他们本身。比如python 只匹配python;hao123 只匹配hao123

管道符号| 匹配多个正则表达式。
比如abc|def 能匹配的是字符串abc 或者 def,而 123|asd|12f 能匹配字符串 123, asd, 12f 中的任意字符串。这里需要注意的是,管道符号| 连接的也能是其他的正则表达式,不一定是只有文本和数字构成的普通文本。实际上,就是我们非常熟悉的“或”操作。

句点 . 用来匹配任何单个字符(换行符除外)。
比如 .a 可以匹配任意字符和a连接的字符串("ba", "ca", "+a", "2a"... 都可以);同理,也可以用 .. 匹配任意两个字符构成的字符串。那么,现在有个问题,就是如何匹配句点本身呢?比如现在要匹配字符串 "ab." ,那么只需要用转义字符 \ 对句点转义即可,相应的正则表达式写为 ab\.

^ 和 $ 分别用来匹配字符串的开头和结尾。
比如 ^I 匹配所有以"I" 开头的字符串;.com$ 匹配所有以 .com 结尾的字符串。同样的,如果想匹配的是这两个字符中的任意一个,要用 \ 转义,比如,想匹配以$为结尾的字符串,可以这样设计正则表达式:.*\$$,其中 * 表示前面的模式重复任意0次或多次。这个我们下面还要再说。

[] 用来创建字符类。
用处和上面说的句点类似,可以匹配方括号里面出现的任何字符。比如 c[abe]t 就能匹配 "cat, cbt, cet" 3个字符,[ab][12] 可以匹配 "a1", "a2", "b1", "b2" 4种字符。

指定范围 - 和否定 ^。
这是关于 [] 操作符的两个特殊的操作。我们可以在 [] 中指定范围,例如, [A-Za-z] 表示匹配任意大写或小写的英文字符;而在 [] 左括号后面第一个字符如果是 ^ 则表示匹配除了 [] 中的模式之外的情况,比如 [^aeiou] 匹配非元音。

闭包操作符 *, +, ?, {} 用来实现多次匹配。
我们一个个来看这4个符号。* 上面已经说过,表示匹配前面出现的正则表达式0次或多次;+ 与 * 类似,匹配前面出现的正则表达式1次或多次;? 匹配前面出现的正则表达式0次或1次;最后,{} 处理的问题是匹配前面出现的正则表达式给定次数的情况,比如 {N} 匹配前面的模式出现N次的情况,一个例子是 [0-9]{18} 可以用来匹配身份证号,而 {M, N} 处理的是前面的模式出现M次到N次的情况。

() 创建组。
() 的存在将正则表达式合成一个分组,比如,(abc){2} 匹配 abcabc,(\w+) (\w) 匹配 ab 2 这样的形式

特殊字符

除了上面说的特殊符号,还有一些特殊的字符。

\d 匹配任何数字,等同于[0-9],\D 表示取反,即所有非数字。正则表达式中,很多情况都是将小写改为大写就是取反了。

\w 匹配任何数字或字母

\s 匹配任何空白符

\b 匹配单词边界. 这个多说两句,其实功能和前面的 ^ 和 $ 是类似的。比如 \band 匹配以"and" 开头的字符串,而 \Band 匹配包含 "and" 却不以 "and" 开头的字符串。

\A 匹配字符串开头,相当于^

\Z 匹配字符串结尾,相当于$

好了,到此,基本的正则表达式的语法就算是学习完毕了。可能还有些地方我没说全,不过好在这些语法讲的很多,随便一本教材或者直接百度都能搜到大量的结果。另外,在这我给一个在线的正则表达式测试的网站:,遇到自己拿不准的情况可以自行先去测试一下。

例子

其实上面的语法规则对于初学者来说还是相当复杂,纯靠记忆是行不通的,唯一的办法就是多练习。下面我们看看几个相对常用的正则表达式。

匹配合法的Python标识符。[A-Za-z_]\w* 匹配以"" 开头,以".com" 结尾的Web域名。^www\..+\.com$ 匹配国内电话号码。\d{3}-\d{8}|\d{4}-\{7,8} 匹配简单的,形如 XXX@YYY.com 的电子邮件地址。\w+@\w+\.com re模块的基本应用

了解正则表达式的语法当然不是学习的最终目的,还要看看放到具体问题中怎么应用。Python为我们提供了一个完整的正则表达式引擎re模块。

匹配

引入re模块,就可以自己设计正则表达式进行匹配了。下面给出了一个简单的用re模块中 match() 进行匹配的实例。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网络推广 http://www.feimao666.com

  • 上一篇:seo优化常用的HTML标签
  • 下一篇:最后一页
  •