美文网首页Python
str.replace() re.sub() 查找和替换文本

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

作者: cook__ | 来源:发表于2018-09-30 17:26 被阅读10次

    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
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/qrwwoftx.html