数字在Python中使用正则表达式的麻烦

时间:2012-01-12 15:09:46

标签: python regex

我正在尝试过滤从.csv文件中检索到的日期,但我尝试的组合似乎没有效果。日期为“2011-10-01 19:25:01”或“年 - 月 - 日时:分:秒”。

我只想要年,月和日期,但我似乎无法从字符串中获取时间:

date = bug[2] # Column in which the date is located  
date = date.replace('\"','') #getting rid of the quotations  
mdate = date.replace(':','')  
re.split('$[\d]+',mdate) # trying to get rid of the trailing set of number (from the time)

提前感谢您的建议。

6 个答案:

答案 0 :(得分:8)

如果您的来源是字符串,那么您最好使用strptime

import datetime
string = "2011-10-01 19:25:01"
dt = datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")

之后,使用

dt.year
dt.month
dt.day

访问您想要的数据。

答案 1 :(得分:6)

使用datetime将输入解析为日期时间对象,然后以您喜欢的任何格式输出:http://docs.python.org/library/datetime.html

答案 2 :(得分:1)

我认为你把线路和美元线的起点混淆了。试试^[\d-]+

答案 3 :(得分:1)

如果格式始终为"YYYY-MM-DD HH:mm:ss",请尝试以下操作:

date = date[1:11]

在提示中:

>>> date = '"2012-01-12 15:13:20"'
>>> date[1:11]
'2012-01-12'
>>> 

不需要正则表达式

答案 4 :(得分:1)

您的代码的一个问题是,在您的上一个正则表达式中,$匹配字符串的结尾,因此正则表达式永远不会匹配任何内容。您可以通过按空格分割并仅获取第一个结果来更简单地完成此操作。删除引号后,行

date.split()

将返回["2011-10-01", "19:25:01"],因此该列表的第一个元素就是您所需要的。

答案 5 :(得分:1)

>>> date = '"2011-10-01 19:25:01"'
>>> date.strip('"').split()[0]
'2011-10-01'