在Python中使用正则表达式更改日期格式

时间:2012-12-13 15:54:11

标签: python regex

我正在尝试将格式为YYYYMMDD的日期转换为MM/DD/YYYY,因为它正在从数据库中读取并写入Excel文件。使用Perl我会做以下事情:

var=~s/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])/$5$6\/$7$8\/$1$2$3$4/;

请记住,这一切都发生在读取数据库信息的“for row in rows”循环结构中。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

而不是使用正则表达式,您可以使用pythons datetime module。

或者您可以将两者合并,但是您想要它,但这将是一种更清晰的方式来修改日期格式。 python是一种语言,其清晰度和易读性与效率同等重要。看下面的代码可以看出我正在修改一个日期戳,而使用正则表达式有时候还不太清楚。

读取datetime元素,然后根据需要编写它:

>>> from datetime import datetime
>>> datestring = '20121212' # 2012 / 12 /12 
>>> datetime.strptime(datestring, '%Y%m%d').strftime('%m/%d/%Y')
'12/12/2012'

答案 1 :(得分:2)

我会选择简单的字符串操作 - 当然不会那么清楚......

>>> s = '20121213'
>>> '/'.join( (s[4:6], s[6:], s[:4]) )
'12/13/2012'

而不是:

>>> re.sub(r'(\d{4})(\d{2})(\d{2})', r'\2/\3/\1', s)
'12/13/2012'

如果你要坚持使用像你在下面发布的那样,那么

  

dateFormatted = row [“TRADE_DATE”] dateFormatted =   re.sub(r'(\ d)(\ d)(\ d)(\ d)(\ d)(\ d)(\ d)(\ d)',r'\ 5 \ 6 / \ 7 \ 8 / \ 1 \ 2 \ 3 \ 4' ,   dateFormatted) - 用户名1901341 5分钟前

然后你可以(ab)使用字符串格式

>>> '{4}{5}/{6}{7}/{0}{1}{2}{3}'.format(*s)
'12/13/2012'

答案 2 :(得分:1)

你不需要使用正则表达式 - Python不会像Perl那样鼓励它们 - 但是你当然可以使用它:

import re 
re.sub(r'(\d{4})(\d{2})(\d{2})', r'\2/\3/\1', datestring)

答案 3 :(得分:0)

我认为你可以在这里完成它,没有正则表达式:

>>> s = '20121225'
>>> conv = '/'.join((s[6:8], s[4:6], s[0:4]))
>>> conv
'25/12/2012'