使用RegEx提取逗号分隔值

时间:2013-03-08 10:16:36

标签: regex powershell csv

我想知道是否有人可以使用RegEx来提取一些值。

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

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

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

4 个答案:

答案 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>