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

14 篇文章 1 订阅

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() 的字符串
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值