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

date
Mar 3, 2020
slug
5589749877991424
status
Published
tags
Python
summary
type
Post

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
让 , , , , 和 只匹配ASCII
re.DEBUG
显示编译时的debug信息,没有内联标记
re.I re.IGNORECASE
忽略大小写匹配
re.L re.LOCALE
由当前语言区域决定 , , 和大小写敏感匹配 (?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))

属性

属性
功能
pos
pos 的值
endpos
endpos 的值
lastindex
最后匹配的捕获组的整数索引,如果没有匹配产生返回 None
lastgroup
最后匹配的捕获组的名称,如果没有匹配产生返回 None
re
返回产生这个实例的 正则对象 ,这个实例是由正则对象的 match()search() 方法产生的
string
传递到 match()search() 的字符串
 
对于本文内容有任何疑问, 可与我联系.