您的位置:首页 > 其它

正则表达式:查找,分割,替换

2020-06-28 05:27 916 查看

(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)。可以看出结果为元组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: