如何使用正则表达式将PT7M37S iso 8601格式转换为持续时间(秒)

时间:2018-04-03 09:54:58

标签: regex python-3.x pandas

我在数据框中有一个具有PT7M37S类型值的列,我希望将它们全部转换为持续时间的秒数。我正在考虑使用正则表达式匹配字符串然后解析整数。

到目前为止,这是我的代码:match = re.match('PT(\d+H)?(\d+M)?(\d+S)?', duration).groups()

hours = _js_parseInt(match[0]) if match[0] else 0
minutes = _js_parseInt(match[1]) if match[1] else 0
seconds = _js_parseInt(match[2]) if match[2] else 0

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

以下是一些反馈:

  • 如果您将(\d+H)?更改为(?:(\d+)H)?,则\d+H是可选的,但只会捕获\d+。这使得以后更容易转换为Python整数。

  • 您可以使用n将某些None转换为字符串或int(n or 0)的整数。我不确定为什么当你知道他们只是整数时你希望在Python中使用_js_parseInt

  • 您可以一次处理re.match(...).groups()的所有值:

    match = re.match(r'PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?', 'PT7M37S')
    (hours, minutes, seconds) = [ int(n or 0) for n in match.groups() ]
    
  • 小心做re.match(...).groups();如果匹配失败,则re.match(...)None,并在其上调用.groups()将导致AttributeError例外。你应该考虑这个角落的情况。