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

你也可能喜欢

发表评论