如何在Python中使用正则表达式替换字符串

如何在Python中使用正则表达式替换字符串,python,Python,我需要使用正则表达式替换字符串中的字符的帮助 输入: s3 = ['March/21/2019' , 'Mar/23/2019'] 期望输出: s3 = ['03/21/2019' , '03/23/2019'] 我尝试了一些方法,但似乎都没有对输入产生任何影响: s3[i]=s3[i]。替换(r'Mar[a-z]*','03') s3[i]=s3[i]。替换(r'(?:Mar[a-z]*),'03') 谁能帮帮我,告诉我我做错了什么 这是有效的 import re s3 = ['March

我需要使用正则表达式替换字符串中的字符的帮助

输入:

s3 = ['March/21/2019' , 'Mar/23/2019']
期望输出:

s3 = ['03/21/2019' , '03/23/2019']
我尝试了一些方法,但似乎都没有对输入产生任何影响:

  • s3[i]=s3[i]。替换(r'Mar[a-z]*','03')

  • s3[i]=s3[i]。替换(r'(?:Mar[a-z]*),'03')

  • 谁能帮帮我,告诉我我做错了什么

    这是有效的

    import re
    s3 = ['March/21/2019' , 'Mar/23/2019']
    s3 = [re.sub(r'Mar[a-z]*', '03', item) for item in s3]
    
    # ['03/21/2019', '03/23/2019']
    
    当然,您也可以使用for循环来提高可读性

    import re
    s3 = ['March/21/2019' , 'Mar/23/2019']
    for i in range(len(s3)):
        s3[i] = re.sub(r'Mar[a-z]*', '03', s3[i])
    
    # ['03/21/2019', '03/23/2019']
    

    如果您只处理日期,请尝试以下操作:

    import datetime
    
    s3 = ['March/21/2019' , 'Mar/23/2019']
    
    for i in range(0, len(s3)):
        try:
            newformat = datetime.datetime.strptime(s3[i], '%B/%d/%Y')
        except ValueError:
            newformat = datetime.datetime.strptime(s3[i], '%b/%d/%Y')
    
        s3[i] = newformat.strftime('%m/%d/%Y')
    

    s3
    现在包含
    ['03/21/2019','03/23/2019']

    如果您只处理日期,我认为最好使用
    datetime
    replace
    不使用正则表达式。您需要
    re.sub(r'Mar[a-z]*','03',s3[i])
    如果您想使用正则表达式,您需要通过
    import re
    导入它,并使用它来代替不支持正则表达式模式的
    str.replace()
    。但是,如果您的数据列表是pandas数据帧的一部分,则可以使用
    df.str.replace()
    ,这反过来又支持它们。