【问题标题】:Extracting comma-separated values using RegEx使用 RegEx 提取逗号分隔值
【发布时间】:2013-02-23 20:32:22
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你试过简单地用逗号分割吗?
  • ^\$(\w{2})(-?\d+\.\d+),(-?\d+\.\d+)\$$ 我之前的模式的改进版本。
  • 最后有一个双美元,我认为不应该在那里(?)实际上 \w{2} 更顽固正确(与Poorkenny的版本相比),因为我提到会有正好两个字母。 \D* 更宽容。谢谢!

标签: regex powershell csv


【解决方案1】:

你很亲密。 看看这个页面debugging regular expressions 并尝试一些简单的东西,比如:\$\D*((-?\d*[.]\d*),)\$

【讨论】:

  • 我喜欢写正则表达式的人总是说“看,这很简单:”:D(别误会我,我也写正则表达式,我也写那...)并且您的正则表达式似乎不起作用(仅尝试匹配单个数字)。 "\$\D*(-?\d*[.]\d*),(-?\d*[.]\d*)\$" 比较复杂但是可以用,不过不知道有没有更简单的写法...
  • 我应该提到我是一个完整的正则表达式菜鸟......我喜欢这个,因为它足够复杂,足以给任何阅读代码的人留下深刻印象...... :) 但是,如前所述。它不能按原样工作。
【解决方案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

【讨论】:

  • 整洁的建议。成功测试了选择字符串版本。谢谢!
【解决方案3】:

正如我在上面的评论中提到的,这个正则表达式似乎有效(如果有人有更简单的解决方案,我很感兴趣)

"\$\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)
}

【讨论】:

  • 不错。并且包裹在完全可以理解的PS中!这按要求工作。谢谢!
【解决方案4】:

还有另一种可能性:

$vals = '$Aa37.33092,-2.9084$' -split '[^--9]' -match '\S'
$val1,$val2 = $vals[0,1]

【讨论】:

  • 哦,多么简单,一旦你把它打印在你面前......我会选择这个的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多