我在数据框中有一个具有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
还有其他办法吗?
答案 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
例外。你应该考虑这个角落的情况。