(1)正则表达式:查找
**(1.1)查找一个匹配项:
**查找并返回一个匹配项的函数有3个:search,match,fullmatch。这3个函数的区别在于:
search:查找任意位置的匹配项;
match:必须从字符串开头匹配;
fullmatch:整个字符串与正则完全匹配
案例1:
import re
text='我爱你呀'
pattern=r'我爱你呀'
print('search:',re.search(pattern,text)) #search:查找任意位置的匹配项
print('match:',re.match(pattern,text)) #match:必须从字符串开头匹配
print('fullmatch:',re.fullmatch(pattern,text)) #fullmatch:整个字符串与正则完全匹配
运行结果为:列出text中与pattern匹配的项的初始位置(0),结束位置(5)和匹配项。
search: <re.Match object; span=(0, 4), match='我爱你呀'>
match: <re.Match object; span=(0, 4), match='我爱你呀'>
fullmatch: <re.Match object; span=(0, 4), match='我爱你呀'>
将上面的例子稍作改变,注意比较结果哦:
案例2:
import re
text='a我爱你呀'
pattern=r'我爱你呀'
print('search:',re.search(pattern,text).group())#通过补充“.group()”获取匹配值。
print('match:',re.match(pattern,text))
print('fullmatch:',re.fullmatch(pattern,text))
运行结果为:
search: 我爱你呀
match: None #text开头加了个a,因此匹配失败
fullmatch: None
(1.2)查找多个匹配项:
查找并返回多个匹配项的函数有2个:findall函数与finditer函数。这两个函数的区别在于:
findall:从字符串任意位置查找,返回一个列表。
finditer:从字符串任意位置查找,返回一个迭代器。
案例3:
import re
text='a我爱你呀,我爱你呀'
pattern=r'我爱你呀'
print('findall:',re.findall(pattern,text))
print('finditer:',list(re.finditer(pattern,text)))
结果为:
findall: ['我爱你呀', '我爱你呀']
finditer:[<re.Match object; span=(1, 5), match='我爱你呀'>, <re.Match object; span=(6, 10), match='我爱你呀'>]
(2)正则表达式:分割
语句:re.split(pattern, string, maxsplit=0, flags=0)
该函数中:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,就是上面我们讲解的常量。
案例4:
text='A你说a,B我像云捉摸不定b,c其实你不懂我的心'
pattern=r','
#正则分割
print('split:',re.split(pattern,text,maxsplit=1,flags=re.I))#逗号分割,分割1次,re.I不区分大小写
运行结果为:
split: ['A你说a', 'B我像云捉摸不定b,c其实你不懂我的心']
(3)正则表达式:替换
替换主要有sub函数 与 subn函数,他们功能类似!
先来看看sub函数的用法:
re.sub(pattern, repl, string, count=0, flags=0)
函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。
值得注意的是:sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。
先来看看subn函数的用法:
re.subn(pattern, repl, string, count=0, flags=0)
函数与 re.sub函数 功能一致,只不过返回一个元组 (字符串, 替换次数)。
案例5:
text='A你说a,B我像云捉摸不定b,c其实你不懂我的心'
pattern=r','
repl='@' #repl为字符串。用‘@’替换‘,’
print('sub-repl为字符串:',re.sub(pattern,repl,text,count=1,flags=re.I))
#该语句运行结果为:sub-repl为字符串: A你说a@B我像云捉摸不定b,c其实你不懂我的心
print('subn-repl为字符串:',re.subn(pattern,repl,text,count=1,flags=re.I))
#运行结果为:subn-repl为字符串:('A你说a@B我像云捉摸不定b,c其实你不懂我的心', 1)。可以看出结果为元组。