[英]Python Regex - match the last group
我有一个看起来像这样的字符串:
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
,输出就可以宽容 此问题不需要正则表达式,可以使用.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
这是因为re.match()
隐式地锚定在字符串的开头 ,这意味着只有匹配出现在字符串的开头 ,它才会成功。 因为它锚定在字符串的开头而不是字符串的结尾,所以此行为可能会造成混淆。 您可能会发现始终使用re.search()
而不是re.match()
更简单,并且在需要锚re.match()
使用^
和/或$
更容易。
正则表达式通常不是最佳解决方案(就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)
您也可以尝试
import re
a= '2017-11-02T00:00:10'
splrex=re.compile(r':(?=\d+$)')
print(splrex.split(a)) # output: ['2017-11-02T00:00', '10']
regx=re.compile(r'^(.*)(\b\d+)$')
m= regx.match(a)
print(m.group(1),m.group(2)) # output: 2017-11-02T00:00: 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.