re模块与正则表达式

24次阅读

共计 2619 个字符,预计需要花费 7 分钟才能阅读完成。

正则表达式
简介
正则表达式(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
正则表达式规则,单字符匹配

字符
功能
正则表达式示例
符合匹配示例

.
匹配任意一个字符(除了 n)
b.b
bab,b2b

[]
匹配来自 [] 中字符集的任意一个字符
i [abCde]m
i am

\d
匹配任何十进制数字,与 [0-9] 一致
w\dcschool
w3cschool

\D
匹配非数字,即不是数字
mou\Dh
mouth

\s
匹配任何空格字符,与 [\n\t\r\v\f] 相同
i\slike
i like

\S
匹配任何非空白字符,与 \s 相反
n\Se
noe,n3e

\w
匹配任何字母数字字符,与 [A-Za-z0-9_] 相同
[A-Za-z]w+

\W
匹配非单词字符
[0-9]\W[A-Z]
3 A

表示数量匹配

字符
功能
正则表达式示例
符合匹配的示例

*
匹配 0 次或者多次前面出现的正则表达式,即可有可无
a*
aaa

+
匹配前一个字符出现 1 次或者无限次,即至少有一次
a+
aaa

?
匹配前一个字符出现 1 次或者 0 次, 要么有一次,要么没有
a?
a 或者 b

{m}
匹配前一个字符出现 m 次
[0-9]{5}
12345

{m.}
匹配前一个字符至少出现 m 次
a{5.}
aaaaa

{m,n}
匹配前一个字符出现从 m 到 n 次
a{2,6}
aaa

表示边界匹配

字符
功能
正则表达式示例

^
匹配字符串起始部分
^Dear

$
匹配字符串终止部分
fi$

b
匹配任何单词的边界
\bThe\b

B
匹配非单词边界
.*\Bver\

匹配分组

字符
功能

\
匹配左右任意一个表达式

(ab)
将括号中字符作为一个分组

\num
引用分组 num 匹配到的字符串

(?P<name>)
分组起别名

(?P=name)
引用别名为 name 分组匹配到的字符串

re 模块
在 python 中,可以使用内置的 re 模块来使用正则表达式
re 模块常见的函数和方法

核心函数
说明

compile(pattern,flags=0)
使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象

re 模块函数和正则表达式对象方法
说明

match(pattern,string,flags=0)
尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功,就返回匹配对象;如果失败,就返回 None

search(pattern,string,flags=0)
使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象;如果失败,则返回 None

findall(pattern,string,[,flags])
查找字符串中所有出现的正则表达式,并返回一个列表

split(pattern,string,max=0)
根据正则表达式的模式分隔符,spilt 函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作 max 次(默认分割所有匹配成功的位置)

sub(pattern,repl,string,count=0)
使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count,否则就将替换所有出现的位置

常用的匹配对象方法
说明

group(num=0)
默认返回整个匹配对象或者返回编号为 num 的特定子组

groups(default=None)
返回一个包含所有匹配子组的元组, 如果没有成功匹配,返回一个空元组

span()

常用的模块属性,大多数用于对正则表达式函数的修饰
说明

re.I
使匹配对大小写不敏感(忽略大小写)

re.S
.(点号)匹配除了 n 之外的所有字符,re.S 标记表示.(点号)能够匹配全部字符

re.M
多行匹配,影响 ^ 和 $

re.U
根据 Unicode 字符集解析字符。影响 \w,\W,\b 和 \B

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

re 模块一般的使用方法

使用 compile() 函数将正则表达式的字符串形式编译为一个正则表达式对象;
通过正则表达式对象提供的一系列方法 (如:match()) 对文本进行匹配查找,获得匹配结果,一个 Match 对象;
最后使用 Match 对象提供的属性和方法 (例如:group()) 获得信息,根据需要进行其他的操作。

re 模块使用示例
导入模块
import re
compile()函数 compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
import re

# 将正则表达式编译成 pattern 对象
pattern = re.compile(r’\d+’)
编译成正则表达式对象后,就可以使用上面所说的正则表达式对象方法了。
match()方法 match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:
match(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
>>> import re
>>>
>>> pattern = re.compile(r’\d+’) # 正则表达式表示匹配至少一个数字
>>>
>>> m = pattern.match(“one2three4”) # match 默认从开头开始匹配,开头是字母 o,所以没有匹配成功
>>> print(m) # 匹配失败返回 None
None
>>>
>>> m = pattern.match(“1two3four”) # 开头字符是数字,匹配成功
>>> print(m)
<_sre.SRE_Match object; span=(0, 1), match=’1′>
>>>
>>> m.group() # group()方法获取匹配成功的字符
‘1’
>>> m = pattern.match(“onetwo3four56”,6,12) # 指定 match 从数字 3 开始查找,第一个是数字 3,匹配成功
>>> print(m)
<_sre.SRE_Match object; span=(6, 7), match=’3′>
>>> m.group()
‘3’

正文完
 0