Python使用正则表达式转换字符串
我想从YouTube数据api转换持续时间变量 PT1M6S-->1:06Python使用正则表达式转换字符串,python,regex,Python,Regex,我想从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'',durat
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)
在一个正则表达式语句中有一种简单的方法吗
谢谢 您可以使用
重新导入
字符串=['PT1M6S'、'PT38S'、'PT58M4']
rx=重新编译(r'^PT(?:(\d+)M)?(?:(\d+)S?$)
对于字符串中的s:
打印(s,'=>',rx.sub(lambda x:f“{(x.group(1)或'00').zfill(2)}:{(x.group(2)或'00').zfill(2)}”,s))
看。输出:
PT1M6S=>01:06
PT38S=>00:38
PT58M4=>58:04
正则表达式演示是^PT(?:(\d+)M)?(?:(\d+)S?)$
,它与
-^PT
位于字符串开头PT
-一个可选的非捕获组匹配1+个数字(将它们捕获到组1)和一个(?:(\d+)M)?
字符M
-可选的非捕获组匹配1+个数字(将它们捕获到组2中)和可选的(?:(\d+)S?)
字符S
-字符串结束$
dateutil
中的解析器。它有一个选项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