Python使用正则表达式转换字符串



我想从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
    

    最新更新