12

您将如何使用 Powershell 计算字符串中的字符串数?

例如:

$a = "blah test <= goes here / blah test <= goes here / blah blah"

<= goes here /我想计算上面出现了多少次。

4

9 回答 9

31

一行中的另一种方式(类似于@mjolinor 方式):

([regex]::Matches($a, "<= goes here /" )).count
于 2013-03-15T20:37:20.647 回答
8

我有一根绳子,里面有一堆管子。我想知道有多少,所以我用这个来得到它。只是另一种方式:)

$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!";
  • 马库斯
于 2015-03-20T22:30:22.760 回答
6

使用正则表达式:

$a = "blah test <= goes here / blah test <= goes here / blah blah"
[regex]$regex = '<= goes here /'
$regex.matches($a).count
2
于 2013-03-15T19:32:51.543 回答
3

您可以使用采用[.NET String.Split][1]字符串对象数组的方法重载,然后计算获得的拆分次数。

($a.Split([string[]]@('<= goes here /'),[StringSplitOptions]"None")).Count - 1

请注意,您必须将搜索的字符串转换为字符串数组,以确保获得正确的Split重载,然后从结果中减去 1,因为 split 将返回搜索字符串周围的所有字符串。同样重要的是“无”选项,如果您的搜索字符串在开头或结尾返回,它将导致拆分在数组中返回空字符串(您可以计算)。

于 2013-03-15T19:23:29.740 回答
3

还有另一种替代方案:(Select-String "_" -InputObject $a -AllMatches).Matches.Count

于 2018-08-28T18:46:38.510 回答
2

我很惊讶没有人提到-split运营商。

对于区分大小写的匹配,请选择-cSplit运算符,因为-split/-iSplit都不区分大小写。

PS Y:\Power> $a = "blah test <= goes here / blah test <= goes here / blah blah"

# $a -cSplit <Delimiter>[,<Max-substrings>[,"<Options>"]]
# Default is RegexMatch (makes no difference here):
PS Y:\Power> ($a -cSplit '<= goes here /').Count - 1
2

# Using 'SimpleMatch' (the 0 means return no limit or return all)
PS Y:\Power> ($a -cSplit '<= goes here/',0,'simplematch').Count - 1
2
于 2019-08-11T07:35:06.370 回答
1

只是为了扩展 BeastianSTI 的优秀答案:

查找文件行中使用的最大分隔符数(运行时行未知):

$myNewCount = 0
foreach ($line in [System.IO.File]::ReadLines("Filename")){
    $fields = $line.Split("*").GetUpperBound(0);
    If ($fields -gt $myNewCount)
    {$myNewCount = $fields}
}
于 2015-10-19T18:49:16.610 回答
1

不是最好的解决方案,但很实用:

$a.Replace("<= goes here /","♀").Split("♀").Count

确保您的文本不包含“♀”字符。

于 2020-08-24T12:16:52.173 回答
1

Select-String 的另一种解决方案

$a = "blah test <= goes here / blah test <= goes here / blah blah"

($a | Select-String -Pattern "<= goes here /" -AllMatches).Matches.Count

选择字符串文档:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string

于 2020-12-27T20:18:20.363 回答