3

我想知道是否有人可以对使用 RegEx 提取一些值有所了解。

我有一个看起来像这样的字符串:

$Aa37.33092,-2.9084$
  • 该字符串将始终以美元符号开头和结尾。
  • 起始美元符号后的两个字母无关紧要,但会一直存在。
  • 后面是两个数值,用逗号分隔。
  • 两者都可以是负数,但不一定是。
  • 两个CAN在点之前最多有三位,在点之后最多有五位(实际位数在字符串到达​​之前是未知的)

然后每个值都应该进入 PowerShell 中的一个唯一变量以进行进一步处理,但我想我可以应付其余的。我只需要一些关于如何提取这些值的提示或指针。

4

4 回答 4

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
于 2013-03-08T10:32:14.260 回答
2

还有另一种可能:

$vals = '$Aa37.33092,-2.9084$' -split '[^--9]' -match '\S'
$val1,$val2 = $vals[0,1]
于 2013-03-08T11:16:33.800 回答
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)
}
于 2013-03-08T10:47:27.773 回答
0

你很亲密。查看此页面以调试正则表达式并尝试一些简单的方法,例如: \$\D*((-?\d*[.]\d*) ,) \$

于 2013-03-08T10:25:24.923 回答