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() 的字符串 |