我有字符串或文本数据:
[string]$hours = @"
10/10/2022
08:11
14:34
06:23 00:00
11/10/2022
08:05
14:28
06:23 00:00
12/10/2022
-
-
00:00 00:00 Día Festivo
13/10/2022
08:10
18:47
10:37 -00:30
14/10/2022
07:28
-
00:00 00:00
-
-
"@
如何选择HH:MM
由选项卡分隔的两个连续时间值,包括第二个可选的负值-HH:MM
?
预期输出:
06:23
06:23
00:00
10:37
我只需要它来选择那些由选项卡分隔的两位数字,如下面的值,但只显示第一个时间值集。
06:23 00:00
06:23 00:00
00:00 00:00
10:37 -00:30
我尝试过以下代码,但我无法得到它来给我我想要的东西。
$hour = $hours.split("`n").ToUpper() | Select-String "" -AllMatches | ForEach {$_.Matches.value}
此 PowerShell 逻辑变体将省略
-notmatch
包含任何大写或小写字母 ("[a-zA-Z]"
) 的 [ ] 行匹配。它将包括 [
-match
] 任何以两位数字 (^\d{2}
)、冒号 (:
) 开头的行匹配,后跟两位数字 (\d{2}
),后跟三个空格 (\s{3,}
),可选连字符 (-?
),后跟两位数字 (\d{2}
)、一个冒号 (:
),然后是两个数字 ( ) — 这为您提供了数组中\d{2}
并排的值。HH:MM
最后,它会将这些行结果按默认空间分割,并仅输出第一个索引值,该索引值将是所需的时间值 (
$_.Split()[0]
)。PowerShell(基于示例数据更具体)
PowerShell(简写——更具体)
PowerShell(另一种变体)
注意: 此匹配仅选择具有两位数的行,后跟三个空格,后跟任何负数或正数两位数,因为您也特别要求。
支持资源
分裂()
创建和使用 PowerShell 数组
Where-对象
常用表达
正则表达式匹配 2 位冒号 2 位数字
如何在此正则表达式中包含负十进制数?
ForEach-对象