概述

元字符

元字符在字符集中不起作用

\用于取消元字符

语法

说明

表达式实例

完整匹配的字符串

一般字符

匹配自身

abc

abc

.

匹配任意字符(\n除外)

ab.

abc

[...]

字符集(对应位子可以是字符集中的任意字符)

a[bcd]e

abe

ace

ade

预定义字符集(可以写在字符集[...]中)

 

 

 

\d

数字:[0-9]

a\dc

a1c

\D

非数字[^\d]

a\Dc

abc

\s

空白字符:[<空格>\t\r\n\f\v]

a\sc

a c

\S

非空白字符:[^\s]

a\Sc

abc

\w

单词字符:[A-Za-z0-9_]

a\wc

abc

\W

非单词字符:[^\w]

a\Wc

a c

数量词(用在字符或(...)之后)

 

 

 

*

匹配前一个字符0次或无限次

abc*

ab

abccc

+

匹配前一个字符1次或无限次

abc+

abc

abccc

匹配前一个字符0次或1次

abc?

ab

abc

{m}

匹配前一个字符m次

ab{2}c

abbc

{m,n}

匹配前一个字符m至n次

ab{1,2}c

abc

abbc

*? +? ?? {m,n}?

使* + {m,n}变成非贪婪模式

 

 

边界匹配

 

 

 

^

匹配字符串开头

在多行模式中匹配每一行开头

^abc

abc

$

匹配字符串末尾

多行模式中每一行末尾

$abc

abc

逻辑和分组

 

 

 

|

左右任意匹配一个

abc|def

abc

def

(...)

分组

(abc){2}

a(123|456)c

abcabc

a123c

a456c

(?P<name>...)

分组,原有编号指定别名

(?P<id>abc){2}

abcabc

(?p=name)

引用别名为<name>分组的字符串

(?P<id>\d)abc(?P=id)

1abc1


正则匹配模式表

标志

含义

re.S(DOTALL)

使.匹配包括换行在内的所有字符

re.I(IGNORECASE)

使匹配对大小写不敏感

re.L(LOCALE)

做本地化识别(locale-aware)匹配,法语等

re.M(MULTILINE)

多行匹配,影响^和$

re.X(VERBOSE)

该标志通过给予更灵活的格式以便将正则表达式写得更易于理解

re.U

根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B

 



 

执行匹配

方法/属性

作用

match()

字符串开始位置匹配,成功返回MatchObject,失败返回None

search()

扫描字符串,找到RE匹配的位置,成功返回MatchObject,失败返回None

findall()

找到RE匹配的所有子串,作为一个列表返回

finditer()

找到RE匹配的所有子串,作为一个迭代器返回    



MatchObject实例方法


方法/属性

作用

group()

返回被RE匹配的字符串

start()

返回匹配开始的位置

end()

返回匹配结束的位置

span()

返回一个元祖包含匹配(开始,结束)的位置



match函数

语法

re.match(pattern,string,flags=0)

参数说明


参数

描述

patten

正则表达式

string

被搜索匹配的字符串,字符串开始

flags

正则表达式修饰符

re.match匹配成功返回matchOject,失败返回None,通过group(num)或groups()获取匹配对象

匹配对象的方法  

匹配对象的方法

描述

 group(num=0)

返回整个匹配(指定分组)

groups()

以元祖形式返回匹配子组

例子

import re

line = "Dogs are smart than caters"

matchObject = re.match(r'(.*) are .* than (.*)',line,re.M|re.I)

if matchObject:

    print "matchObject group()",matchObject.group()

    print "matchObject group(1)",matchObject.group(1)

    print "matchObject group(2)",matchObject.group(2)

else:

    print "No match"

当执行上面的代码,它产生以下结果:

matchObject group() Dogs are smart than caters

matchObject group(1) Dogs

matchObject group(2) caters


search函数

语法

re.search(pattern,string,flags=0)

参数说明

参数

描述

patten

正则表达式

string

被搜索匹配的字符串,字符串开始

flags

正则表达式修饰符

re.search匹配成功返回searchOject,失败返回None,通过group(num)或groups()获取匹配对象

匹配对象的方法

匹配对象的方法

描述

 group(num=0)

返回整个匹配(指定分组)

groups()

以元祖形式返回匹配子组


例子

import re

line = "Dogs are smart than caters"

seachObject = re.search(r'(.*) are .* than (.*)',line,re.M|re.I)

if seachObject:

    print "searcObject.group():",seachObject.group()

    print "searcObject.group(1):",seachObject.group(1)

    print "searcObject.group(2):",seachObject.group(2)

else:

    print "No search"

当执行上面的代码,它产生以下结果

searcObject.group(): Dogs are smart than caters

searcObject.group(1): Dogs

searcObject.group(2): caters