我有一个字符串,它以下面的格式返回持续时间。

"152M0S" or "1H22M32S"

我需要从中提取小时、分钟和秒作为数字。
我试过下面的regex
video_duration.scan(/(\d+)?.(\d+)M(\d+)S/)

但它并没有像预期的那样回归。任何人都知道我错在哪里。

最佳答案

可以使用以下表达式:/((?<h>\d+)H)?(?<m>\d+)M(?<s>\d+)S/

"1H22M32S".match(/((?<h>\d+)H)?(?<m>\d+)M(?<s>\d+)S/)
#=> #<MatchData "1H22M32S" h:"1" m:"22" s:"32">

"152M0S".match(/((?<h>\d+)H)?(?<m>\d+)M(?<s>\d+)S/)
#=> #<MatchData "152M0S" h:nil m:"152" s:"0">

组后的问号使其成为可选的。访问数据:$~[:h]

09-11 20:23