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
网友评论