如何将 ISO 8601 持续时间转换为 Lua 中的格式化字符串?
How would I convert ISO 8601 durations into a formatted string in Lua?
我最近一直在使用 Youtube API v3(是的,我知道,它不适合 Lua),但是当我需要将 ISO 8601 持续时间转换为格式化时字符串,网络上没有任何帮助。我一直在到处搜索,以搜索可以帮助解决此类问题的特定库,但不幸的是, NONE 对应 Lua。除了 Lua.
之外,还有数以千计的其他语言的库
现在,我似乎受困于我什至不知道如何使用的字符串模式。那么我还能如何完成这项任务呢?
ISO 8601 持续时间示例:
PT3M33S
我想把它转换成这样:
3:33
如果您不想解析整个 ISO 8601 规范,请尝试以下代码:
s="PT3M33S"
t=s:gsub("^.-(%d+)M(%d+)S","%1:%2")
print(t)
它使用Lua 模式匹配。模式如下:跳过所有内容,直到 运行 数字后跟 M
,然后找到 运行 数字后跟 S
。捕获两个 运行 的数字并在替换模式中使用它们。
如果你想提取这两个数字,使用这个:
s="PT3M33S"
M,S=s:match("^.-(%d+)M(%d+)S")
print(M,S)
我最近一直在使用 Youtube API v3(是的,我知道,它不适合 Lua),但是当我需要将 ISO 8601 持续时间转换为格式化时字符串,网络上没有任何帮助。我一直在到处搜索,以搜索可以帮助解决此类问题的特定库,但不幸的是, NONE 对应 Lua。除了 Lua.
之外,还有数以千计的其他语言的库现在,我似乎受困于我什至不知道如何使用的字符串模式。那么我还能如何完成这项任务呢?
ISO 8601 持续时间示例:
PT3M33S
我想把它转换成这样:
3:33
如果您不想解析整个 ISO 8601 规范,请尝试以下代码:
s="PT3M33S"
t=s:gsub("^.-(%d+)M(%d+)S","%1:%2")
print(t)
它使用Lua 模式匹配。模式如下:跳过所有内容,直到 运行 数字后跟 M
,然后找到 运行 数字后跟 S
。捕获两个 运行 的数字并在替换模式中使用它们。
如果你想提取这两个数字,使用这个:
s="PT3M33S"
M,S=s:match("^.-(%d+)M(%d+)S")
print(M,S)