在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

我需要想出一个函数,它将接受一个字符串,它将执行以下操作:

  • 检查它是否是UTC格式的时间戳(例如,它的格式是否为
    2014-05-10T12:30:00
  • 如果是上述格式,请将“T”替换为空格并返回字符串
  • 如果不是时间戳,只需返回字符串

  • 在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做了一些简单的小把戏,但这并不能真正帮助你思考你的问题。但是下一次,带上一些你曾经试过写的代码回来,否则你永远也学不会。