3

正規表現を使用していくつかの値を抽出することに誰かが光を当てることができるのではないかと思います。

次のような文字列があります。

$Aa37.33092,-2.9084$
  • 文字列は常にドル記号で始まり、終わります。
  • 最初のドル記号の後の 2 文字は関係ありませんが、常に存在します。
  • コンマで区切られた 2 つの数値が続きます。
  • どちらも負になる可能性がありますが、負である必要はありません。
  • 両方とも、ドットの前に最大 3 桁、ドットの後に最大 5 桁の数字を使用できます (実際の桁数は、文字列が到着するまで不明です)。

次に、各値を PowerShell の一意の変数に入れてさらに処理する必要がありますが、残りは対処できると思います。これらの値を抽出する方法についてのヒントやポインタが必要です。

4

4 に答える 4

2

そしてさらに別の可能性:

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