itqijian 发表于 2023-4-3 20:31:24

【已解决】请教 时间正则

本帖最后由 itqijian 于 2023-4-4 18:33 编辑

2 小时 9 分钟 6 秒
要求正则后结果 2:09:06、 2:19:56
时间要补零,一个正则解决,技术不够,请教大佬们。
$nTime0 = "2 小时 9 分钟 6 秒"
$nTime1 = StringRegExpReplace($nTime0, "\W{4}", ":")
$nTime2 = StringRegExpReplace($nTime1, "\W{2}", "\")
ConsoleWrite($nTime2)

afan 发表于 2023-4-3 21:15:00

Local $sSource = '2 小时 09 分钟 06 秒'
MsgBox(0, '', StringRegExpReplace($sSource, '(\d+)\D+(\d+)\D+(\d+)\D*', '\1:\2:\3'))

itqijian 发表于 2023-4-3 21:25:13

afan 发表于 2023-4-3 21:15


不好意思,原本的时间多了个零。

yohoboy 发表于 2023-4-4 01:20:43

Local $sSource = '2 小时 9 分钟 6 秒'
$strtemp = StringRegExpReplace($sSource, '(\d+)\D+(\d+)\D+(\d+)\D*', '\1:\2:\3')
$strtemp = StringRegExpReplace($strtemp,':(\d)(?=\D|$)', ':0\1')
MsgBox(0,'',$strtemp)

Local $sSource = '2 小时 19 分钟 56 秒'
$strtemp = StringRegExpReplace($sSource, '(\d+)\D+(\d+)\D+(\d+)\D*', '\1:\2:\3')
$strtemp = StringRegExpReplace($strtemp,':(\d)(?=\D|$)', ':0\1')
MsgBox(0,'',$strtemp)

ps:修改之前a大告知,如果正則一次不行,那就兩次搞定。

gyp2000 发表于 2023-4-4 08:12:38

补零应该是字符串格式化的工作,而不是正则要干的事情。
$nTime0 = "2 小时 9 分钟 6 秒"
$Tmp = StringRegExp($nTime0, "(\d+)\D+(\d+)\D+(\d+)\D*", 1)
ConsoleWrite(StringFormat("%01i:%02i:%02i",$Tmp , $Tmp, $Tmp) & @CRLF)

gyp2000 发表于 2023-4-4 08:20:34

换一个简单的正则也行。
$nTime0 = "2 小时 9 分钟 6 秒"
$Tmp = StringRegExp($nTime0, "\d+", 3)
ConsoleWrite(StringFormat("%01i:%02i:%02i",$Tmp , $Tmp, $Tmp) & @CRLF)

itqijian 发表于 2023-4-4 18:34:54

gyp2000 发表于 2023-4-4 08:20
换一个简单的正则也行。
$nTime0 = "2 小时 9 分钟 6 秒"
$Tmp = StringRegExp($nTime0, "\d+", 3)


$Tmp, $Tmp
如果没有小时时间,会错误。

gyp2000 发表于 2023-4-4 19:21:15

itqijian 发表于 2023-4-4 18:34
$Tmp, $Tmp
如果没有小时时间,会错误。

那就判断下数组的下标。如果只有2个元素就只格式化2个元素。

itqijian 发表于 2023-4-4 19:28:05

gyp2000 发表于 2023-4-4 19:21
那就判断下数组的下标。如果只有2个元素就只格式化2个元素。

最初就是为了简化代码量,如果再加判断就本末倒置。
页: [1]
查看完整版本: 【已解决】请教 时间正则