我想知道是否有人可以使用RegEx来提取一些值。
我有一个看起来像这样的字符串:
$Aa37.33092,-2.9084$
然后,每个值应该进入PowerShell中的唯一变量以进行进一步处理,但我认为我可以应对其余的。 我只需要一些关于如何提取这些值的提示或指示。
答案 0 :(得分:2)
这样的事情:
$vals = [regex]::Matches('$Aa37.33092,-2.9084$','(-?\d*\.\d*)') |
select -expa value
$val1 = $vals[0]
$val2 = $vals[1]
使用拆分方法:
$vals =( ('$Aa37.33092,-2.9084$').Split(',') ) -replace '\$|[a-z]'
$val1 = $vals[0]
$val2 = $vals[1]
或使用select-string
'$Aa37.33092,-2.9084$' | select-string '(-?\d*\.\d*)' -AllMatches |
Foreach {$_.matches} | select -expa value
答案 1 :(得分:2)
还有另一种可能性:
$vals = '$Aa37.33092,-2.9084$' -split '[^--9]' -match '\S'
$val1,$val2 = $vals[0,1]
答案 2 :(得分:1)
正如我在上面的评论中提到的,这个正则表达式似乎有效(如果有人有更简单的解决方案,我很感兴趣)
"\$\D*(-?\d*[.]\d*),(-?\d*[.]\d*)\$"
所以有了一点PowerShell:
$sourceString = '$Aa37.33092,-2.9084$'
if($sourceString -match "\$\D*(-?\d*[.]\d*),(-?\d*[.]\d*)\$")
{
$firstNumber = $matches[1]
$secondNumber = $matches[2]
Write-Host ("Here are the numbers: {0} - {1}" -f $firstNumber,$secondNumber)
}
答案 3 :(得分:0)
你非常接近。 看一下debugging regular expressions的这个页面并尝试一些简单的东西:\ $ \ D *(( - ?\ d * [。] \ d *),) \ $ < / p>