我有一个看起来像这样的字符串:
a = '2017-11-02T00:00:10'
我想匹配最后一个组,即我的字符串中的10
。
所以,像这样:2017-11-02T00:00:
和10
我尝试了re.match(r':\d+$', a)
,re.match(r':00$', a)
,re.match(r':00+$', a)
但它们似乎都不起作用。任何人都可以解释为什么我的正则表达式不起作用,以及如何从我的字符串中捕获最后一个组?
10
答案 0 :(得分:3)
这个问题不需要正则表达式,可以使用.split()轻松解决
a = '2017-11-02T00:00:10'
milliseconds = a.split(':')[-1]
print(milliseconds)
>>>"10"
定时:
%timeit '2017-11-02T00:00:10'.split(':')[-1]
265 ns ± 3.86 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
如果你真的想采用速度较慢的正则表达式路线:
import re
a = '2017-11-02T00:00:10'
m = re.findall(r"\d+$", a)
print(m[0])
>>>10
答案 1 :(得分:2)
这是因为re.match()
implicitly anchors at the beginning of the string,这意味着只有匹配出现在那里才会成功。因为它锚定在字符串的开头但不是字符串的结尾,这种行为可能会令人困惑。您可能会发现始终使用re.match()
代替^
更简单,并在需要锚定时使用$
和/或photoCollectionView
。
答案 2 :(得分:2)
正则表达式通常不是最佳解决方案(在perfs方面)。如果有工具可以完成这项工作,你应该使用它们。这里datetime.strptime是你的朋友:
>>> from datetime import datetime
>>> date = datetime.strptime('2017-11-02T00:00:10', '%Y-%m-%dT%H:%M:%S')
>>> date
datetime.datetime(2017, 11, 2, 0, 0, 10)
>>> date.second
10
定时:
%timeit datetime.strptime('2017-11-02T00:00:10', '%Y-%m-%dT%H:%M:%S').second
10.7 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
答案 3 :(得分:1)
您也可以尝试这个
extension=gd2