str.replace() re.sub() 查找和替换文本

1、对于简单的文本模式,使用str.replace()即可

text = 'yeah, but no, but yeah, but no, but yeah'
text.replace('yeah', 'yep')
Out[4]: 'yep, but no, but yep, but no, but yep'
2、针对更为复杂的模式,可以使用re模块中的sub()函数/方法

使用示例:把日期格式从'09/30/2018'转换成'2018-09-30'

text = 'Today is 9/30/2018. PyCon starts 3/13/2013.'
re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
Out[8]: 'Today is 2018-9-30. PyCon starts 2013-3-13.'

说明:sub()的第一个参数是要匹配的模式,第二个参数是要替换上的模式。类似'\3'这样的反斜线加数字的符号代表着模式中捕获组的数量。

3、对于更加复杂的情况,可以指定一个替换回调函数

import calendar
def change_date(m):
    non_name = calendar.month_abbr[int(m.group(1))]
    return '{} {} {}'.format(m.group(2), non_name, m.group(3))

datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
datepat.sub(change_date, text)  # 传入回调函数,会自动将模式传给回调函数作为参数
Out[11]: 'Today is 30 Sep 2018. PyCon starts 13 Mar 2013.'

如果还想知道一共完成了多少次替换,可以使用re.subn()

newtext, n = datepat.subn(r'\3-\1-\2', text)
newtext
Out[13]: 'Today is 2018-9-30. PyCon starts 2013-3-13.'
n
Out[14]: 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值