我想从YouTube数据api转换持续时间变量?
PT1M6S->1:06
PT38S->0:38
PT58M4->58:04
这是我的代码:
p['duration']是json数据的值
duration = re.sub(r'^PT',r'',p['duration'])
duration = re.sub(r'M',r':',duration)
if (len(p['duration']) > 5 ):
duration = re.sub(r'S',r'',duration)
else:
duration = "0:" + re.sub(r'S',r'',duration)
有没有一种简单的方法可以在一个regex语句中完成?
谢谢!
您可以使用
import re
strings = ['PT1M6S', 'PT38S', 'PT58M4']
rx = re.compile(r'^PT(?:(d+)M)?(?:(d+)S?)?$')
for s in strings:
print(s, ' => ', rx.sub(lambda x: f"{(x.group(1) or '00').zfill(2)}:{(x.group(2) or '00').zfill(2)}", s))
请参阅在线演示。输出:
PT1M6S => 01:06
PT38S => 00:38
PT58M4 => 58:04
regex演示是^PT(?:(d+)M)?(?:(d+)S?)?$
,它与匹配
^PT
-PT
(?:(d+)M)?
-一个可选的非捕获组,匹配1+个数字(将它们捕获到组1中(和一个M
字符(?:(d+)S?)?
-一个可选的非捕获组,匹配1+个数字(将它们捕获到组2中(和一个可选S
字符$
—字符串结束使用正则表达式的另一种选择是使用dateutil
中的parser
。它有一个选项fuzzy
,您可以使用它将数据转换为datetime
。如果你减去今天的午夜,你得到的值是timedelta
:
from dateutil import parser
from datetime import date
from datetime import datetime
lst = ['PT1M6S','PT38S', 'PT58M4']
for t in lst:
print(parser.parse(t, fuzzy=True) - datetime.combine(date.today(), datetime.min.time()))
给你
0:01:06
0:00:38
0:58:04