Powershell を使用して文字列内の文字列の数をカウントするにはどうすればよいでしょうか?
例えば:
$a = "blah test <= goes here / blah test <= goes here / blah blah"
上記に何回<= goes here /
出現するかを数えたいと思います。
Powershell を使用して文字列内の文字列の数をカウントするにはどうすればよいでしょうか?
例えば:
$a = "blah test <= goes here / blah test <= goes here / blah blah"
上記に何回<= goes here /
出現するかを数えたいと思います。
別の方法 (@mjolinor の方法と同様) を 1 行で:
([regex]::Matches($a, "<= goes here /" )).count
たくさんのパイプが入った弦がありました。何個あるか知りたかったので、これで調べてみました。ちょうど別の方法:)
$ExampleVar = "one|two|three|four|fivefive|six|seven";
$Occurrences = $ExampleVar.Split("|").GetUpperBound(0);
Write-Output "I've found $Occurrences pipe(s) in your string, sir!";
正規表現の使用:
$a = "blah test <= goes here / blah test <= goes here / blah blah"
[regex]$regex = '<= goes here /'
$regex.matches($a).count
2
[.NET String.Split][1]
文字列オブジェクトの配列を受け取るメソッド オーバーロードを使用して、取得した分割数を数えることができます。
($a.Split([string[]]@('<= goes here /'),[StringSplitOptions]"None")).Count - 1
Split
split は検索文字列を囲むすべての文字列を返すため、検索する文字列を文字列配列にキャストして正しいオーバーロードを取得し、結果から 1 を減算する必要があることに注意してください。検索文字列が最初または最後に返された場合に、Split が配列に null 文字列を返すようにする "None" オプションも重要です (これは数えることができます)。
BeastianSTI の優れた回答を拡張するだけです。
ファイルの行で使用されるセパレーターの最大数を見つける (行は実行時に不明):
$myNewCount = 0
foreach ($line in [System.IO.File]::ReadLines("Filename")){
$fields = $line.Split("*").GetUpperBound(0);
If ($fields -gt $myNewCount)
{$myNewCount = $fields}
}
最善の解決策ではありませんが、実用的です:
$a.Replace("<= goes here /","♀").Split("♀").Count
テキストに「♀」文字が含まれていないことを確認してください。