re 模块中其他常用的函数
sub 和 subn 搜索与替换
sub 函数和 subn 函数用于实现搜索和替换功能。这两个函数的功能几乎完全相同,都是 将某个字符串中所有匹配正则表达式的部分替换成其他字符串。用来替换的部分可能是一个 字符串,也可以是一个函数,该函数返回一个用来替换的字符串。sub 函数返回替换后的结果,subn 函数返回一个元组,元组的第 1 个元素是替换后的结果,第 2 个元素是替换的总 数。语法格式如下:
re.sub(pattern, repl, string, count=0, flags=0)
| 参数 | 描述 |
|---|---|
| pattern | 匹配的正则表达式 |
| repl | 替换的字符串,也可为一个函数 |
| string | 要被查找替换的原始字符串 |
| count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配 |
【示例】sub 和 subn 方法的使用
import re
phone = "2004-959-559 #这是一个国外电话号码"
# 删除字符串中的 Python 注释
num = re.sub(r'#.*$', '', phone)
print("电话号码是: ", num)
# 删除非数字(-)的字符串
num = re.sub(r'\D', '', phone)
print("电话号码是 : ", num)
#subn 函数的使用
result=re.subn(r'\D', "", phone)
print(result)
print('替换的结果:',result[0])
print('替换的次数:',result[1])

compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。语法格式为:
re.compile(pattern[, flags])
| 参数 | 描述 |
|---|---|
| pattern | 一个字符串形式的正则表达式 |
| flags | 可选,表示匹配模式,比如忽略大小写,多行模式等 |
【示例】compile 函数的使用
import re
s = 'first123 line'
regex = re.compile(r'\w+') #匹配至少一个字母或数字或下划线
m = regex.match(s)
print(m.group())
# s 的开头是 "f", 但正则中限制了开始为 i 所以匹配失败
regex = re.compile(r"^i\w+")
print(regex.match(s))

findall 函数
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的, 则返回空列表。语法格式如下:
findall(pattern, string, flags=0)
| 参数 | 描述 |
|---|---|
| pattern | 匹配的正则表达式 |
| string | 要匹配的字符串 |
| flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等 |
【示例】findall 函数的使用
import re
pattern = r'\w+'
s = 'first 1 second 2 third 3'
o = re.findall(pattern, s)
print(o)
注意:match 和 serch 是匹配一次 findall,pindall是匹配所有
finditer 函数
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭 代器返回。
【示例】finditer 函数的使用
import re
pattern = r'\w+'
s = 'first 1 second 2 third 3'
o = re.finditer(pattern, s)
print(o)
for i in o:
print(i.group())

split 函数
split 函数用于根据正则表达式分隔字符串,也就是说,将字符串与模式匹配的子字符串 都作为分隔符来分隔这个字符串。split 函数返回一个列表形式的分隔结果,每一个列表元素 都是分隔的子字符串。语法格式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
| 参数 | 描述 |
|---|---|
| pattern | 匹配的正则表达式 |
| string | 要匹配的字符串 |
| maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数 |
| flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配 等 |
【示例】split 函数的使用
import re
s = 'first 11 second 22 third 33'
#按数字切分
print(re.split(r'\d+',s))
# maxsplit 参数限定分隔的次数,这里限定为 1,也就是只分隔一次
print(re.split(r'\d+',s,1))

贪婪模式和非贪婪模式
贪婪模式指 Python 里数量词默认是贪婪的,总是尝试匹配尽可能多的字符。非贪婪模 式与贪婪相反,总是尝试匹配尽可能少的字符,可以使用"*","?","+","{m,n}"后面加上?,使 贪婪变成非贪婪。
【示例】贪婪模式,.+中的’.'会尽量多的匹配
import re
v = re.match(r'(.+)(\d+-\d+-\d+)','This is my tel:133-1234-1234')
print('----------贪婪模式---------') print(v.group(1))
print(v.group(2))
print('----------非贪婪模式---------')
v = re.match(r'(.+?)(\d+-\d+-\d+)','This is my tel:133-1234-1234') print(v.group(1))
print(v.group(2))
【示例】贪婪模式非贪婪模式测试
print('贪婪模式')
v = re.match(r'abc(\d+)', 'abc123')
print(v.group(1))
print('非贪婪模式')
v = re.match(r'abc(\d+?)', 'abc123')
print(v.group(1))

本文介绍了Python中re模块的常用函数,包括用于搜索与替换的sub和subn函数、编译正则表达式的compile函数、查找所有匹配子串的findall和finditer函数,以及分隔字符串的split函数。还讲解了贪婪模式和非贪婪模式的区别。
,贪婪模式与非贪婪模式&spm=1001.2101.3001.5002&articleId=114160217&d=1&t=3&u=ca1afcafac6a448bb37d25424468873c)
2203

被折叠的 条评论
为什么被折叠?



