这是我想用PowerShell使用正则表达式解析的示例字符串。如何获取正则表达式在字符串之前返回数字
04/22/17 19:16:44 77.9 BATT Min: 00.0 Max: 100.0
这里是我的正则表达式来获得数字:
'\d+\.\d'
我想要做的就是字符串(BATT)专用数字前(77.9)。我能够用得到77.9和BATT:
(\d+\.\d)\s+BATT
我只需要在它自己的号码,虽然我不知道如何得到正确的展望做。
这是我想用PowerShell使用正则表达式解析的示例字符串。如何获取正则表达式在字符串之前返回数字
04/22/17 19:16:44 77.9 BATT Min: 00.0 Max: 100.0
这里是我的正则表达式来获得数字:
'\d+\.\d'
我想要做的就是字符串(BATT)专用数字前(77.9)。我能够用得到77.9和BATT:
(\d+\.\d)\s+BATT
我只需要在它自己的号码,虽然我不知道如何得到正确的展望做。
一个有效的前瞻会像“匹配数(前瞻这是。其次是空间,然后BATT)在这个例子中,寻找“一个或多个非空间”,以获得数量:
PS C:\> $s = '04/22/17 19:16:44 77.9 BATT Min: 00.0 Max: 100.0'
PS C:\> $s -match '\S+(?=\s+BATT)'
True
PS C:\> $Matches
Name Value
---- -----
0 77.9
但看你的数据,正则表达式是矫枉过正,这是一个日期,在IME,一个数字 - 用空格分开,并采取了第三件事:
PS C:\> (-split $s)[2]
77.9
而且对正则表达式的话题,我比较喜欢的正则表达式其中“取代你不想要的东西”,而不是“匹配你做了什么什么“,因为它们是一步操作,您不必处理匹配和组提取:
PS C:\> $s -replace '.*?(\S+)\s+BATT.*', '$1'
77.9
你根本不需要向前看。你(\d+\.\d)\s+BATT
正则表达式是正确的,你只需要只选择第一组:
$input = "04/22/17 19:16:44 77.9 BATT Min: 00.0 Max: 100.0"
$match = $input -match "(\d+\.\d)\s+BATT"
if($match) {
$value = $match[1]
Write-Host $value
}
给了我这样的输出:
77.9