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
    原文作者:cook__
    原文地址: https://www.jianshu.com/p/bb9d3270ebd9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞