Python Regex - 匹配最后一组

时间:2018-04-07 02:59:46

标签: python regex match

我有一个看起来像这样的字符串:

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
  • ,输出就可以是宽松的

4 个答案:

答案 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)

另见strftime() and strptime() Behavior

答案 3 :(得分:1)

您也可以尝试这个

extension=gd2