在python中检查字符串是否包含日期或时间戳
我需要想出一个函数,它将接受一个字符串,它将执行以下操作:在python中检查字符串是否包含日期或时间戳,python,datetime,Python,Datetime,我需要想出一个函数,它将接受一个字符串,它将执行以下操作: 检查它是否是UTC格式的时间戳(例如,它的格式是否为2014-05-10T12:30:00) 如果是上述格式,请将“T”替换为空格并返回字符串 如果不是时间戳,只需返回字符串 在python中实现这一点的最佳方法是什么?我想我可以使用datetime模块。但这可以用re模块实现吗 您可以使用正则表达式进行匹配: >>> s1 = "1) check if it is a timestamp in UTC format
2014-05-10T12:30:00
)在python中实现这一点的最佳方法是什么?我想我可以使用datetime模块。但这可以用re模块实现吗 您可以使用正则表达式进行匹配:
>>> s1 = "1) check if it is a timestamp in UTC format (e.g. if it is of the form '2014-05-10T12:30:00')."
>>> s2 = "3) If it is not of timestamp, simply return the string."
>>> re.compile('\d\d\d\d-\d\d-\d\d\(T\)\d\d:\d\d:\d\d')
<_sre.SRE_Pattern object at 0x7f9781558470>
>>> s = re.sub(r'(.*\d\d\d\d-\d\d-\d\d)T(\d\d:\d\d:\d\d.*)',r'\1 \2',s1)
>>> print(s)
1) check if it is a timestamp in UTC format (e.g. if it is of the form '2014-05-10 12:30:00').
>>> s = re.sub(r'(.*\d\d\d\d-\d\d-\d\d)T(\d\d:\d\d:\d\d.*)',r'\1 \2',s2)
>>> print(s)
3) If it is not of timestamp, simply return the string.
>>>
>>s1=“1)检查它是否是UTC格式的时间戳(例如,它是否为'2014-05-10T12:30:00'格式)。”
>>>s2=“3)如果不是时间戳,只需返回字符串即可
>>>重新编译('\d\d\d-\d\d-\d\d\(T\)\d\d:\d\d:\d\d')
>>>s=re.sub(r'(.*d\d\d\d-\d\d-\d\d)T(\d\d:\d\d:\d\d.*),r'\1\2',s1)
>>>印刷品
1) 检查它是否是UTC格式的时间戳(例如,它的格式是否为“2014-05-10 12:30:00”)。
>>>s=re.sub(r'(.*d\d\d\d-\d\d-\d\d)T(\d\d:\d\d:\d\d.*),r'\1\2',s2)
>>>印刷品
3) 如果不是时间戳,只需返回字符串。
>>>
这里的诀窍是捕捉
T
字符的左侧和右侧组,并将它们再次粘贴到空格周围。另外,如果没有匹配项,就没有替代项。虽然zmo的答案是正确的,但我看到很多人,尤其是经验丰富的系统管理员,他们非常擅长正则表达式,经常选择自己制作正则表达式。
正则表达式很难维护和读取,Python自己的STL提供了一些经过尝试和测试的方法,无需重新发明正确的正则表达式。
这是我的2分钱蟒蛇式解决方案:
In[87]: import time
In[88]: correct = "2014-05-10T12:30:00"
In[89]: wrong = "some string" # will raise ValueError
In[90]: try:
time.strptime(correct, "%Y-%m-%dT%H:%M:%S")
correct = correct.replace('T',' ')
except ValueError:
pass
....
In [91]: correct
Out[91]: '2014-05-10 12:30:00'
In [93]: wrong = "foo bar baz"
In [94]: try:
time.strptime(wrong, "%Y-%m-%dT%H:%M:%S")
correct = correct.replace('T',' ')
except ValueError:
pass
....
In [95]: wrong
Out[95]: 'foo bar baz'
我很抱歉我做了你的家庭作业,因为尽管我用regexp做了一些简单的小把戏,但这并不能真正帮助你思考你的问题。但是下一次,带上一些你曾经试过写的代码回来,否则你永远也学不会。