regex 如何将持续时间(分钟)转换为小时+分钟

vmpqdwk3  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(173)

我有一个从“1”到“999”不等的输入字符串。此值表示视频片段的运行时间(以分钟为单位)。我需要将字符串转换为以小时和分钟表示的相同持续时间。
例如:

"97" needs to become "1h 37m"
    "123" needs to become "2h 3m"
    "231" needs to become "3h 51m"

我需要用正则表达式(PHP7中的PCRE)来实现这一点。4).不幸的是,我不能用PHP编程,所以我限制在regex模式。我已经写好代码了:(\d+)为输入字符串匹配部分。但是正则表达式不能与数值进行比较。否则,我可以解决这个问题(在伪代码中):

int( [input var] / 60 ) = [hours]
    [input var] modulus 60 = [mins]
    print "[hours]h [mins]m"

因为我不能使用这个,所以我没有clou来指定正则表达式的替换模式。
我该怎么做?

v7pvogib

v7pvogib1#

使用Raku(以前称为Perl_6)

  • 注意,我不能用PHP解决你的问题,但也许这个Raku代码可以提供一些指导?*
~$ raku -pe 's/ ^ \" <( \d+ )> /{ (($/.Int / 60).Int, "h ", $/.Int % 60, "m").join }/;' file

#OR

~$ raku -pe 's/ ^ \" <( \d+ )> /{($/.Int / 60).Int}h {$/.Int % 60}m/;'  file

基本上,您编写了一行程序,通过自动打印逐行遍历文件-pe。使用传统的s///替换运算符(对于多个替换,请使用s:g/// i。即全局)。
1.搜索\d+原子
1.用<(把火柴扔到外面。.. )>
1.使用{。..}码块来计算替换。
1.将$/捕获强制为Int,除以60,取其Int
1.使用Raku的%模运算符来获得余数
1.在适当位置添加hmjoin删除空格(如有必要)。
样品输入:

"97" needs to become "1h 37m"
"123" needs to become "2h 3m"
"231" needs to become "3h 51m"

样本输出:

"1h 37m" needs to become "1h 37m"
"2h 3m" needs to become "2h 3m"
"3h 51m" needs to become "3h 51m"

HTH。
https://docs.raku.org
https://raku.org

相关问题