匹配模式替换
字符串对象的 replace 方法只适应于简单的替换。
比如,我们需要在下面这段文本中所有的链接中找到所以 /avxxxxxx/ 这种以 /av 开头,后面接一串数字, 这种模式的字符串。
然后,这些字符串全部替换为 /cn345677/ 。
names = ''' 下面是这学期要学习的课程: <a href='https://www.bilibili.com/video/av66771949/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是牛顿第2运动定律 <a href='https://www.bilibili.com/video/av46349552/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是毕达哥拉斯公式 <a href='https://www.bilibili.com/video/av90571967/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是切割磁力线 '''
被替换的内容不是固定的,所以没法用字符串的replace方法。
这时,可以使用正则表达式里面的 sub 方法。
import re names = ''' 下面是这学期要学习的课程: <a href='https://www.bilibili.com/video/av66771949/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是牛顿第2运动定律 <a href='https://www.bilibili.com/video/av46349552/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是毕达哥拉斯公式 <a href='https://www.bilibili.com/video/av90571967/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> 这节讲的是切割磁力线 ''' newStr = re.sub(r'/av\d+?/', '/cn345677/' , names) print(newStr)
sub 方法就是也是替换字符串, 但是被替换的内容用正则表达式来表示符合特征的所有字符串。
比如,这里就是第一个参数 /av\d+?/ 这个正则表达式,表示以 /av 开头,后面是一串数字,再以 / 结尾的 这种特征的字符串 ,是需要被替换的。
第二个参数,这里 是 ‘/cn345677/’ 这个字符串,表示用什么来替换。
第三个参数是 源字符串。