PowerShell正则表达式挑选经过的时间

时间:2013-06-28 11:29:25

标签: regex powershell scripting

我是PowerShell脚本的新手,而且我对Regex并不是很好...... 我想创建一个正则表达式,从以下文本文件中选出时间...

gfskf dakdshadk daksdkdahkd daksdhasdkh()zadf sflh f.d / sd lhlfhlj f 12hrs:10mins:05sec fsfsf fsfjhsfjh

我希望得到的时间为12分钟,10分钟为5秒。

$hour= [regex]::match($line,$hour_regex).Groups[1].Value
$mins= [regex]::match($line,$mins_regex).Groups[1].Value
$sec= [regex]::match($line,$sec_regex).Groups[1].Value

基本上我需要三个正则表达式来从文件中提取相关数据。

提前致谢!

7 个答案:

答案 0 :(得分:2)

使用一个正则表达式:

$r = '(\d+)hrs:(\d+)mins:(\d+)sec'
$i = 'hlfhlj f 12hrs:10mins:05sec fsfsf f'
$result = [regex]::match($i,$r)
$hour = $result.Groups[1].Value
$mins = $result.Groups[2].Value
$sec = $result.Groups[3].Value

答案 1 :(得分:2)

只是为了好玩:

$a = "gfskf dakdshadk daksdkdahkd daksdhasdkh () zadf sflh f.d / sd lhlfhlj f 12hrs:10mins:05sec fsfsf fsfjhsfjh"

$hour,$min, $sec = $a -split '(\d\d)' | ? { $_ -match '\d\d' }

答案 2 :(得分:1)

由于还没有人提及,您也可以使用-match运算符。可以通过$matches哈希表:

访问子匹配
Get-Content "C:\path\to\your.txt" | ? {
  $_ -match '(\d+)hrs:(\d+)mins:(\d+)sec'
} | % {
  $h = $matches[1]
  $m = $matches[2]
  $s = $matches[3]

  "{0}:{1}:{2}" -f ($h, $m, $s)
}

答案 3 :(得分:0)

使用正则表达式捕获组。 "(\d+)hrs:(\d+)mins:(\d+)sec"会将数字捕获到可以访问的组中。将结果保存在MatchCollection中以检查结果。像这样,

$line = "sflh f.d / sd lhlfhlj f 12hrs:10mins:05sec fsfsf"
PS C:\> $mc = [regex]::match($line, "(\d+)hrs:(\d+)mins:(\d+)sec")
PS C:\> $mc.Groups[1].value
12
PS C:\> $mc.Groups[2].value
10
PS C:\> $mc.Groups[3].value
05

答案 4 :(得分:0)

您可以尝试:

$b= [regex]".* (\d*)hrs:(\d*)mins:(\d*)sec.*"
$hours=$b.Match($a).groups[1].value
$minutes=$b.Match($a).groups[2].value
$seconds=$b.Match($a).groups[3].value

答案 5 :(得分:0)

如果像我一样你对正则表达式不太满意,你可以使用分割功能:

PS>$t="gfskf dakdshadk daksdkdahkd daksdhasdkh () zadf sflh f.d / sd lhlfhlj f 12hrs:10mins:05sec fsfsf fsfjhsfjh"

PS>$slices=$t.split(@(" ",":"))
$hours=($slices[12]).substring(0,2)
$mins=($slices[13]).substring(0,2)
$secs=($slices[14]).substring(0,2)

答案 6 :(得分:0)

PS> $s -replace '^.+ (\d+hrs:\d+mins:\d+sec).*$','$1' -split '\D+' | where {$_}
12
10
05