如何使用Powershell计算字符串中字符串的数量?
例如:
$a = "blah test <= goes here / blah test <= goes here / blah blah"
我想计算<= goes here /
出现在上面的次数。
答案 0 :(得分:23)
([regex]::Matches($a, "<= goes here /" )).count
答案 1 :(得分:4)
使用正则表达式:
$a = "blah test <= goes here / blah test <= goes here / blah blah"
[regex]$regex = '<= goes here /'
$regex.matches($a).count
2
答案 2 :(得分:2)
您可以使用带有字符串对象数组的[.NET String.Split][1]
方法重载,然后计算您获得的分割数。
($a.Split([string[]]@('<= goes here /'),[StringSplitOptions]"None")).Count - 1
请注意,您必须将搜索的字符串强制转换为字符串数组,以确保获得正确的Split
重载,然后从结果中减去1,因为split将返回搜索字符串周围的所有字符串。同样重要的是“无”选项,如果搜索字符串在开头或结尾返回,将导致Split返回数组中的空字符串(可以计算)。
答案 3 :(得分:2)
我有一个带有一堆管道的字符串。我想知道有多少,所以我用它来得到它。另一种方式:)
$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!";
答案 4 :(得分:1)
不是最佳解决方案,但很实用:
$a.Replace("<= goes here /","♀").Split("♀").Count
确保您的文本不包含“♀”字符。
答案 5 :(得分:0)
为了扩大BeastianSTI&#39;优秀的答案:
查找文件行中使用的最大分隔符数(运行时未知的行):
$myNewCount = 0
foreach ($line in [System.IO.File]::ReadLines("Filename")){
$fields = $line.Split("*").GetUpperBound(0);
If ($fields -gt $myNewCount)
{$myNewCount = $fields}
}
答案 6 :(得分:0)
还有另一种班轮:(Select-String "_" -InputObject $a -AllMatches).Matches.Count
答案 7 :(得分:0)
我很惊讶没有人提到-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
答案 8 :(得分:0)
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