re模块是用来处理与正则表达式有关的操作的模块
compile函数
compile函数用于编译正则表达式,生成一个Pattern对象
import re
pattern = re.compile(r'\w+')
然后,我们就可以使用这个Pattern对象来进行正则匹配了
match函数
match方法用于查找字符串指定位置(不指定的默认整个字符串)正则匹配。它只匹配一次,也就是说,只要找到一个匹配的结果就返回,而不会返回所有的匹配结果。
上代码
import re
pattern = re.compile(r'\d+')
m1 = pattern.match('one123')
print(m1)
m2 = pattern.match('one123', 3, 6)
print(m2)
print(m2.group())
m3 = re.match(r'\d+', 'one123')#不使用compile直接匹配,只能匹配整个字符串
print(m3)
m4 = re.match(r'[a-z]+', 'Abcde', re.I)#忽略大小写模式
print(m4)
print(m4.group())
输出结果
None
<re.Match object; span=(3, 6), match='123'>
123
None
<re.Match object; span=(0, 5), match='Abcde'>
Abcde
观察的时候发现,m1并没有匹配到值而m2匹配到了一个值。看来它是从字符串的开头进行匹配的?只要有不满足条件的字符,匹配就会终止。
search函数
search函数与match类似,都是查找字符串在指定位置的正则匹配且只匹配一次。区别在于,match函数要完全满足正则表达式才返回,而search函数只需字符串包含正则表达式的子串就认为匹配。
上代码看的清楚一点
import re
pattern = re.compile(r'\d+')
m1 = pattern.search('one123')
print(m1)
print(m1.group())
m2 = pattern.search('one123', 0, 4)
print(m2)
print(m2.group())
m3 = re.search(r'\d+', 'one123')
print(m3)
print(m3.group())
m4 = re.search(r'[a-z]+', '123Abcde', re.I) #忽略大小写模式
print(m4)
print(m4.group())
输出结果
<re.Match object; span=(3, 6), match='123'>
123
<re.Match object; span=(3, 4), match='1'>
1
<re.Match object; span=(3, 6), match='123'>
123
<re.Match object; span=(3, 8), match='Abcde'>
Abcde
re.findall函数
match函数和search函数都是一次匹配。当我们需要搜索整个字符串,获取全部匹配结果的时候,我们需要用到findall函数。
无论是否匹配到字符串,findall都会返回一个list对象
举个例子
import re
pattern = re.compile(r'\d{2}')#精确匹配2个数字
m1 = pattern.findall('one1234')
print(m1)
m2 = pattern.findall('one123', 0, 4)
print(m2)
m3 = re.findall(r'\d+', 'one123')
print(m3)
m4 = re.findall(r'[a-z]', '123Abcde', re.I)
print(m4)
运行结果
['12', '34']
[]
['123']
['A', 'b', 'c', 'd', 'e']
re.split函数
字符串也有split方法,但是字符串只能完全匹配相同的字符。re模块中的split方法可以用正则表达式丰富分割字符串的规则。
上代码
import re
pattern = re.compile(r'[\s\,\;]+')
m1 = pattern.split('a,b;;c d')
print(m1)
m2 = re.split(r'[\s\,\;]+', 'a,b;; c d')
print(m2)
运行结果
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']
可以看到,split函数会在我们匹配的字符处将字符串断开,并返回一个list对象。
re.sub函数
re.sub函数为我们提供了使用正则表达式来替换字符的功能
举个例子吧
import re
s = 'hello 123 world 456'
pattern = re.compile(r'(\w+) (\w+)')
m1 = pattern.sub('hello world', s)
print(m1)
m2 = pattern.sub('hello world', s, 1) #只替换一次
print(m2)
m3 = re.sub(r'(\w+) (\w+)', 'hello world', s, 1)
print(m3)
执行结果
hello world hello world
hello world world 456
hello world world 456