Python正则表达式急速入门

正则表达式在程序开发中会经常用到,比如数据(格式)验证、替换字符内容以及提取字符串内容等等情况都会用到,但是目前许多开发人员对于正则表达式只是处于了解或者是基本会用的阶段。一旦遇到大批量使用正则表达式的情况(例如网络爬虫)可以说基本上就抓瞎了。这篇文章我将带领大家利用Python来学习一下正则表达式。在阅读这篇文章前你需要掌握Python基础知识,或者具有其他开发语言的基础知识也可以,因为基本上每种语言使用正则表达式的方式都是类似的。

零、正则表达式基础

1.提取字符(串)有时我们需要从一个字符串中获取一段内容,这段内容可能是一个字符也可能是一段字符串,如果用逐字对比遍历的话不仅耗时耗力而且还容易出错。那么这个时候我们就可以用到正则表达式中的字符匹配功能。正则表达式为我们提供了4种字符匹配的方法,见下表:

2.预定义字符所谓预定义字符就是正则表达式中为我们预留的专门用来匹配格式化内容的字符,例如匹配数字用的\d和匹配空白符的\s等等。我们可以利用预定义字符快速的匹配出一个字符串中符合要求的内容。预定义字符匹配的内容,同样也可以利用前面所讲的字符匹配的方式匹配出来,但是代码量会相对来说多一点。下表所列的就是预定义字符:

在预定义字符中有如下几点需要注意:

\b匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置。\b是零宽度。\w在不同编码语言中匹配的范围是不一样的,在使用ASCII码的语言中匹配的是[a-zA-Z0-9],而在使用Unicode码的语言中匹配的是[a-zA-Z0-9]和汉字、全角符号等特殊字符。3.限制数量在某些情况下我们需要匹配重复的内容,这时我们可以使用数量限定模式来进行操作。数量限定如下表:

4.断言断言,又称零宽断言,指的是当断言表达式为True时才进行匹配,但是并不匹配断言表达式内容。和^代表开头,$代表结尾,\b代表单词边界一样,先行断言和后行断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为零宽。所谓位置,是指字符串中第一个字符的左边、最后一个字符的右边以及相邻字符的中间。零宽断言表达式有四种:

零宽度负回顾后发断言(?!exp),表达式不成立时匹配断言后面的位置,成立时不匹配。例如\w+(?zxc)\d,匹配不以zxc结尾的字符串;零宽度负回顾先行断言(?!exp),表达式匹配断言前面的位置,成立时则不匹配。例如:\d(?!zxc)\w+,匹配不以zxc开头的字符串;先行断言(?=exp),断言为真时匹配断言前面的位置,例如要在“aregularexpression”这个字符串中追匹配出regular中的re,我们可以这么写re(?=gular);后发断言(?=exp),断言为真时匹配断言后面的位置,例如对“egexrepresentsregularexpression”这个字符串要想匹配除regex和regular之外的re,可以用re(?!g),该表达式限定了re右边的位置,这个位置后面不是字符g。先行和后发的区别就在于该位置之后的字符能否匹配括号中的表达式。5.贪婪/非贪婪正则表达式会尽可能多的去匹配字符,这被称为贪婪模式,贪婪模式是正则表达式默认的模式。但是有时候贪婪模式会给我们造成不必要的困扰,例如我们要匹配字符串“JackChenChen”中的“JackChen”,但是贪婪模式匹配出的却是“JackChenChen”,这时我们就需要用到非贪婪模式来解决这个问题,非贪婪模式常用的表达式如下:

6.其他上述内容在正则表达式中都是常用的,下面我们再来看看不常用到的,但是功能同样强大的语法。

OR匹配又称匹配分支,也就是说只要有一个分支匹配就算匹配,这和我们在开发中使用的OR语句类似。OR匹配利用

分割分支,例如我们需要匹配出英文姓名,但是在英文中姓和名中间有可能是以·分割,也有可能是以空格分隔,这时我们就可以利用OR匹配来处理这个问题。格式如下:[A-Za-z]+·[A-Za-z]+

[A-Za-z]+\s[A-Za-z]+组合,将几个项组合为一个单元,这个单元可通过*+?

等符号加以修饰,而且可以记住和这个组合相匹配的字符串以提供伺候的引用使用。分组使用()来表示。例如获取日期的正则表达式可以这么写:\d{4}-(0[1-9]

1[0-2])-(0[1-9]

12

3[01])。第一个分组(0[1-9]

1[0-2])代表月的正则匹配,第二个分组(0[1-9]

12

3[01])代表日的正则匹配。一、Python使用正则表达式

在Python中使用正则表达式很简单,re模块向我们提供了正则表达式的支持。使用步骤一共三步:

将正则表达式字符串转换为Pattern的实例;使用Pattern实例去处理要匹配的字符,匹配结果是一个Match实例;利用Match实例去进行之后的操作。在Python中我们常用的re的方法有六种,分别是:


转载请注明:http://www.aierlanlan.com/rzgz/1425.html