Python 标准库之 re (正则表达式操作)

Python re模块详解
本文深入讲解了Python的re模块,涵盖了Pattern和Match两种核心对象,详细解析了search、match、findall、finditer、sub和compile等关键函数的用法,并提供了丰富的代码示例。

re 库的两种对象

Pattern :正则表达式对象
Match :匹配对象

常用内容

search

匹配字符串的第一个位置

In [1]: import re

In [2]: s = "I am a simple string"

In [3]: r = re.search("am", s)

In [4]: r
Out[4]: <re.Match object; span=(2, 4), match='am'>

In [5]: r.span()
Out[5]: (2, 4)

In [7]: r.group()
Out[7]: 'am'

match

从字符串开始的位置匹配

In [1]: import re

In [2]: s = "I am a simple string"

In [3]: r = re.match("I", s)

In [4]: r
Out[4]: <re.Match object; span=(0, 1), match='I'>

In [5]: r.span()
Out[5]: (0, 1)

In [6]: r.group()
Out[6]: 'I'

In [7]: r = re.match("am", s)

In [8]: print(r)
None

findall

匹配所有的字串并返回一个匹配列表

In [1]: import re

In [2]: s = "Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24)"

In [3]: re.findall(r"\d+", s)
Out[3]: ['3', '8', '1', '3', '8', '1', '1', '293', '6', '18', '2019', '22', '39', '24']

finditer

返回为一个元素未匹配对象的迭代器

In [1]: import re

In [2]: s = "Python 3.8.1"

In [3]: r =  re.finditer(r"\d+", s)

In [4]: r
Out[4]: <callable_iterator at 0x56022f8>

In [5]: for i in r:
    ...:     print(i)
    ...:     print(i.group())
    ...:
    ...:
<re.Match object; span=(7, 8), match='3'>
3
<re.Match object; span=(9, 10), match='8'>
8
<re.Match object; span=(11, 12), match='1'>
1

sub

替换匹配到的字串

In [1]: import re

In [2]: s = "I am a simple string"

In [3]: re.sub("s\w*", "python", s)
Out[3]: 'I am a python python'

compile

将正则表达式编译为一个 正则表达式对象,用于多次匹配

In [1]: import re

In [2]: pattern = r"\d+"

In [3]: p = re.compile(pattern)

In [4]: r = p.findall("abc123 k23 77")

In [5]: r
Out[5]: ['123', '23', '77']

In [6]: r = p.findall("1.2@12*g00")
    
In [7]: r
Out[7]: ['1', '2', '12', '00']

速查表

函数参数说明

参数功能
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式
maxsplit分隔次数,默认为 0,不限制次数
pos可选参数,指定字符串的起始位置,默认为 0。
endpos可选参数,指定字符串的结束位置,默认为字符串的长度。
repl替换的字符串,也可为一个函数
count模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

标志常量

标志功能
re.A
re.ASCII
让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII
re.DEBUG显示编译时的debug信息,没有内联标记
re.I
re.IGNORECASE
忽略大小写匹配
re.L
re.LOCALE
由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配 (?i)
re.M
re.MULTILINE
多行匹配 (?m)
re.S
re.DOTALL
让 ‘.’ 特殊字符匹配任何字符,包括换行符 (?s)
re.X
re.VERBOSE
这个标记允许你编写更具可读性更友好的正则表达式,空白符号会被忽略,除非在一个字符集合当中或者由反斜杠转义,或者在 *?,(?: 或 (?P<…> 分组之内

函数

函数功能
re.compile(pattern, flags=0)将正则表达式的样式编译为一个 正则表达式对象
re.search(pattern, string, flags=0)扫描整个 string 找到匹配样式的第一个位置,并返回一个相应的匹配对象。如果没有匹配,返回 None
re.match(pattern, string, flags=0)string 的起始位置匹配一个正则表达式样式,匹配就返回一个相应的匹配对象 。 如果没有匹配,返回 None
re.fullmatch(pattern, string, flags=0)如果整个 string 匹配到正则表达式样式,就返回一个相应的匹配对象 。 否则返回 None
re.split(pattern, string, maxsplit=0, flags=0)pattern 切分 string
re.findall(pattern, string, flags=0)string中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
re.finditer(pattern, string, flags=0)string中找到正则表达式所匹配的所有子串,并返回一个迭代器
re.sub(pattern, repl, string, count=0, flags=0)使用 repl 替换字符串中的匹配项
re.subn(pattern, repl, string, count=0, flags=0)行为与 sub() 相同,但是返回一个元组
re.escape(pattern)转义 pattern 中的特殊字符
re.purge()清除正则表达式缓存

正则表达式对象(Pattern)

方法
方法功能
search(string[, pos[, endpos]])扫描整个 string 找到匹配样式的第一个位置,并返回一个相应的匹配对象。如果没有匹配,返回 None
match(string[, pos[, endpos]])string 的起始位置匹配一个正则表达式样式,匹配就返回一个相应的匹配对象 。 如果没有匹配,返回 None
fullmatch(string[, pos[, endpos]])如果整个 string 匹配到正则表达式样式,就返回一个相应的匹配对象 。 否则返回 None
split(string, maxsplit=0)等价于 split() 函数
finditer(string[, pos[, endpos]])string中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
sub(repl, string, count=0)等价于 sub() 函数
subn(repl, string, count=0)等价于 subn() 函数
属性
属性功能
flags正则匹配标记
groups捕获组合的数量
groupindex映射由 (?P<id>) 定义的命名符号组合和数字组合的字典
pattern编译对象的原始样式字符串

匹配对象(Match)

方法
方法功能
expand(template)对 template 进行反斜杠转义替换并且返回,就像sub() 方法中一样
group([group1, ...])返回一个或者多个匹配的子组
__getitem__(g)等价于 m.group(g)
groups(default=None)返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合
groupdict(default=None)返回一个字典,包含了所有的 命名 子组
start([group])
end([group])
返回 group 匹配到的字串的开始和结束标号
span([group])返回一个二元组包含匹配 (开始,结束) 的位置 (m.start(group), m.end(group))
属性
属性功能
pospos 的值
endposendpos 的值
lastindex最后匹配的捕获组的整数索引,如果没有匹配产生返回 None
lastgroup最后匹配的捕获组的名称,如果没有匹配产生返回 None
re返回产生这个实例的 正则对象 ,这个实例是由正则对象的 match()search() 方法产生的
string传递到 match()search() 的字符串
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值