匹配函数
re.match
: 从字符串的起始位置匹配一个模式,如果不是则返回None
re.search
: 扫描整个字符串并返回第一个成功的匹配re.findall
: 在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配,返回空列表[]
re.finditer
: 与findall
类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
其他说明:
-
re.MatchObject
: match和search一旦匹配成功就返回此对象,此对象有以下几种常用函数group()
返回被RE匹配的字符串start()
返回匹配开始的位置end()
返回匹配结束的位置span()
返回一个元组包含匹配(开始,结束)的位置
-
re.match
与re.search
的区别re.match
只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
re.search
匹配整个字符串,直到找到一个匹配
match search compile
import re
# 测试 match 函数 匹配的是开头的
print(re.match('\d{4}', "wq2345sfdssw2")) # None
# 测试 search 函数 匹配
print(re.search('\d{4}', "wq2345sfdssw2")) # <_sre.SRE_Match object; span=(2, 6), match='2345'>
# 测试compile函数 封装一个正则
pat = re.compile("^[1][3456789][0-9]{9}$")
# 匹配手机号
print(pat.match('15345689545')) # <_sre.SRE_Match object; span=(0, 11), match='15345689545'>
match object 对象
match
和 search
一旦匹配成功,就是一个match object对象,而该对象有一下几个方法:
- group() 返回被RE匹配的字符串
- start() 返回匹配开始的位置
- end() 返回匹配结束的位置
- span() 返回一个元组包含匹配(开始, 结束)的位置
import re
ob = re.match('\d+', '123sdsf')
print(ob) # <_sre.SRE_Match object; span=(0, 3), match='123'>
print(ob.group()) # 123
print(ob.span()) # (0, 3)
print(ob.start()) # 0
print(ob.end()) # 3
ob = re.search('\d+', '123sdsf')
print(ob.group()) # 123
查找函数 findall finditer
import re
str = "<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>"
data = re.findall("<li>(.*?)</li>", str)
for v in data:
print(v)
# 分别会输出
# aaa
# bbb
# ccc
分割函数
- 按照能够匹配的子串将string分割后返回列表
- 可以使用
re.split
来分割字符串,如:re.split(r'\s+', text)
; 将字符串按空格分割成一个单词列表 - 格式:
re.split(pattern, string[,maxsplit])
import re
s = '2232322,2342;222:23'
dd = re.split("[^0-9]", s)
yy = re.split("[^0-9]", s, 2)
for v in dd:
print(v)
# 分别输出
# 2232322
# 2342
# 222
# 23
print(">>>>")
for i in yy:
print(i)
# 分别输出
# 2232322
# 2342
# 222:23
替换函数
-
sub
- 使用
re
替换string中每一个匹配的子串后返回替换后的字符串 - 格式:
re.sub(pattern, repl, string, count)
- 使用
-
subn
- 返回替换次数
- 格式:
subn(pattern, repl, string, count=0, flags=0)
import re
# 将非零数字全部替换为空格
s = "12,22;2323:"
b = re.sub("[^0-9]", "", s)
c = re.subn("[^0-9]", "", s)
print(b) # 12222323
print(c) # ('12222323', 3) # 还返回了本次替换了几个值, 返回的是元组