Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用正则表达式转换字符串_Python_Regex - Fatal编程技术网

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

Python使用正则表达式转换字符串,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

我想从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)
在一个正则表达式语句中有一种简单的方法吗

谢谢

您可以使用

重新导入
字符串=['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
    位于字符串开头
  • (?:(\d+)M)?
    -一个可选的非捕获组匹配1+个数字(将它们捕获到组1)和一个
    M
    字符
  • (?:(\d+)S?)
    -可选的非捕获组匹配1+个数字(将它们捕获到组2中)和可选的
    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