正则系列4: re.sub用法

re.sub

替换字符串中每一个匹配的字串后返回替换后的字符串
该方法主要用的三个参数,第一个参数是匹配模式即正则表达式,也是你要替换的原字符串部分。第二个参数是你需要替换成的字符串。第三个参数是原字符串。
re.sub(pattern, repl, string, count=0, flags=0)

  • 匹配演练
    实战的效果是最好的,直接练习
    练习1:
    要求:把1234567用空字符替换掉,也就是相等于把字符串中的1234567删除掉。
import re

content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('\d+','',content)
print(content)

结果:
Extra stings Hello World_This is a Regex Demo Extra stings

练习2:
要求:把1234567替换成Replacement

import re

content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('\d+','Replacement',content)
print(content)

结果:
Extra stings Hello Replacement World_This is a Regex Demo Extra stings

练习3:
要求:把1234567替换成1234567 8910。(如果我们要替换的是原字符串本身或者包换原字符串)

import re

#1.把匹配的正则表达式加一个括号
#2.\1是表示拿到匹配内容,就是把(\d+)的内容拿到手了和 8910组合成新的内容
#3.但是反斜杠会转义,我们需要原生字符,前面加r。
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('(\d+)',r'\1 8910',content)
print(content)

结果:
Extra stings Hello 1234567 8910 World_This is a Regex Demo Extra stings

练习4:

import re

html='''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id ="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈惠琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>
'''

要求:把所有歌名匹配出来。要用到re.sub内容。因为上一篇我们用re.findall匹配出了所有歌名。当时直接用re.findall写的有些复杂,这次我们练习用re.sub简化下,再re.findall
思路:用re.sub把标签替换掉,我们只取所有歌名,标签不需要

html = re.sub('<a.*?>|</a>','',html)
print(html)
results = re.findall('<li.*?>(.*?)</li>',html,re.S)
print(results)
for result in results:
    print(result.strip())
结果:
<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id ="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            沧海一声笑
        </li>
        <li data-view="4" class="active">
            往事随风
        </li>
        <li data-view="6">光辉岁月</li>
        <li data-view="5">记事本</li>
        <li data-view="5">
            但愿人长久
        </li>
    </ul>
</div>

['一路上有你', '\n            沧海一声笑\n        ', '\n            往事随风\n        ', '光辉岁月', '记事本', '\n            但愿人长久\n        ']
一路上有你
沧海一声笑
往事随风
光辉岁月
记事本
但愿人长久

可以看到匹配出来的内容有的有换行符,有的没有,那是因为在li标签中,有的内容有换行符,有的内容没有…,所有我们取内容,strip()下就ok了。re.sub方法就介绍到这里。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值