Python正则表达式模块re讲解

时间:2025-05-11

python 正则表达式 re 模块

2 re模块的基本函数

在上面的说明中,我们已经对re模块的基本函数‘f indall’很熟悉了。当然如果光有findall的话,很多功能是不能实现的。下面开始介绍一下re模块其它的常用基本函数。灵活搭配使用这些函数,才能充分发挥Python正则式的强大功能。

首先还是说下老熟人findall函数吧

findall(rule , target [,flag] )

在目标字符串中查找符合规则的字符串。

第一个参数是规则,第二个参数是目标字符串,后面还可以跟一个规则选项(选项功能将在compile函数的说明中详细说明)。

返回结果结果是一个列表,中间存放的是符合规则的字符串。如果没有符合规则的字符串被找到,就返回一个空列表。

2.1 使用compile加速

compile( rule [,flag] )

将正则规则编译成一个Pattern对象,以供接下来使用。

第一个参数是规则式,第二个参数是规则选项。

返回一个Pattern对象

直接使用findall ( rule , target )的方式来匹配字符串,一次两次没什么,如果是多次使用的话,由于正则引擎每次都要把规则解释一遍,而规则的解释又是相当费时间的,所以这样的效率就很低了。如果要多次使用同一规则来进行匹配的话,可以使用http://www.77cn.com.cnpile函数来将规则预编译,使用编译过返回的Regular Expression Object或叫做Pattern对象来进行查找。

>>> s='111,222,aaa,bbb,ccc333,444ddd'

>>> rule=r’\b\d+\b’

>>> compiled_rule=http://www.77cn.com.cnpile(rule)

>>> compiled_rule.findall(s)

['111', '222']

可见使用compile过的规则使用和未编译的使用很相似。compile函数还可以指定一些规则标志,来指定一些特殊选项。多个选项之间用 ’|’(位或)连接起来。

I IGNORECASE 忽略大小写区别。

L LOCAL 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 "ç"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。

M MULTILINE 多行匹配。在这个模式下’^’(代表字符串开头)和’$’(代表字符串结尾)将能够匹配多行的情况,成为行首和行尾标记。比如

>>> s=’123 456\n789 012\n345 678’

>>> rc=http://www.77cn.com.cnpile(r’^\d+’) #匹配一个位于开头的数字,没有使用M选项

>>> rc.findall(s)

['123'] #结果只能找到位于第一个行首的’123’

>>> rcm=http://www.77cn.com.cnpile(r’^\d+’,re.M) #使用 M 选项

>>> rcm.findall(s)

['123', '789', '345'] #找到了三个行首的数字

python 正则表达式 re 模块

同样,对于’$’来说,没有使用M选项,它将匹配最后一个行尾的数字,即’678’,加上以后,就能匹配三个行尾的数字456 012和678了.

>>> rc=http://www.77cn.com.cnpile(r’\d+$’)

>>> rcm=http://www.77cn.com.cnpile(r’\d+$’,re.M)

>>> rc.findall(s)

['678']

>>> rcm.findall(s)

['456', '012', '678']

S DOTALL ‘.’号将匹配所有的字符。缺省情况下’.’匹配除换行符’\n’外的所有字符,使用这一选项以后,’.’就能匹配包括’\n’的任何字符了。

U UNICODE \w, \W, \b, \B, \d, \D, \s 和 \S都将使用Unicode。

X VERBOSE 这个选项忽略规则表达式中的空白,并允许使用’#’来引导一个注释。这样可以让你把规则写得更美观些。比如你可以把规则

>>> rc = http://www.77cn.com.cnpile(r"\d+|[a-zA-Z]+") #匹配一个数字或者单词

使用X选项写成:

>>> rc = http://www.77cn.com.cnpile(r""" # start a rule

\d+ # number

| [a-zA-Z]+ # word

""", re.VERBOSE)

在这个模式下,如果你想匹配一个空格,你必须用'\ '的形式('\'后面跟一个空格)

2.2 match与search

match( rule , targetString [,flag] )

search( rule , targetString [,flag] )

(注:re的match 与search函数同compile过的Pattern对象的match与search函数的参数是不一样的。Pattern对象的match与search函数更为强大,是真正最常用的函数)

按照规则在目标字符串中进行匹配。

第一个参数是正则规则,第二个是目标字符串,第三个是选项(同compile函数的选项) 返回:若成功返回一个Match对象,失败无返回

findall虽然很直观,但是在进行更复杂的操作时,就有些力不从心了。此时更多的使用的是match和search函数。他们的参数和findall是一样的,都是:

match( rule , targetString [,flag] )

search( rule , targetString [,flag] )

不过它们的返回不是一个简单的字符串列表,而是一个MatchObject(如果匹配成功的话) .。通过操作这个matchObject,我们可以得到更多的信息。

需要注意的是,如果匹配不成功,它们则返回一个NoneType。所以在对匹配完的结果进行操作之前,你必需先判断一下是否匹配成功了,比如:

>>> m=re.match( rule , target )

>>> if m: #必需先判断是否成功

doSomethin…… 此处隐藏:6012字,全部文档内容请下载后查看。喜欢就下载吧 ……

Python正则表达式模块re讲解.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219