我需要想出一个函数,它将接受一个字符串,它将执行以下操作:
2014-05-10T12:30:00
)。在 python 中完成此操作的最佳方法是什么?我以为我可以使用 datetime 模块。但这可以使用 re 模块来完成吗?
虽然 zmo 的答案是正确的,但我看到很多人,尤其是经验丰富的系统管理员,他们在 regex opt 方面非常出色,经常会制作自己的正则表达式。正则表达式很难维护和阅读,Python 自己的 STL 提供了一些很好的经过试验和测试的方法来做到这一点,而无需重新发明正确的正则表达式。这是我 2 美分的 Pythonic 解决方案:
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'
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式进行匹配:
>>> 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.
>>>
Run Code Online (Sandbox Code Playgroud)
这里的技巧是捕获T
角色左侧和右侧的组,然后将它们再次粘贴到空格周围。作为奖励,如果没有匹配,就没有替换。
归档时间: |
|
查看次数: |
10372 次 |
最近记录: |