gpt4 book ai didi

replace - Powershell,你做了多少次替换?

转载 作者:行者123 更新时间:2023-12-04 11:45:18 24 4
gpt4 key购买 nike

我需要知道 Powershell 在使用 -replace 时做了多少次替换运算符(operator)或 Replace()方法。或者,如果这是不可能的,如果它进行了任何替换。

例如,在 Perl 中,因为替换操作返回进行的替换次数,在 bool 上下文中,零为假,非零为真,可以这样写:

$greeting = "Hello, Earthlings";
if ($greeting ~= s/Earthlings/Martians/) { print "Mars greeting ready." }

但是,使用 Powershell 时,运算符和方法会返回新字符串。运营商似乎提供了一些额外的信息,如果有人知道如何要求它(例如,捕获的组存储在它在当前范围内创建的新变量中),但我不知道如何获得计数或成功值(value)。

我可以只比较之前和之后的值,但这似乎完全没有效率。

最佳答案

你是对的,我认为你不能从 -replace 中挤出任何额外的东西。但是,您可以使用 Regex.Matches() 找到匹配的数量。 .例如

> $greeting = "Hello, Earthlings"
> $needle = "l"
> $([regex]::matches($greeting, $needle)).Length # cast explicitly to an array
3

然后,您可以使用使用相同匹配引擎的 -replace 运算符。

再深入一点后,有一个重载的 Replace 需要 MatchEvaluator每次匹配时调用的委托(delegate)。因此,如果我们将其用作累加器,它可以一次性计算替换的数量。
> $count = 0
> $matchEvaluator = [System.Text.RegularExpressions.MatchEvaluator]{$count ++}
> [regex]::Replace("Hello, Earthlings","l",$matchEvaluator)
> $count
Heo, Earthings
3

关于replace - Powershell,你做了多少次替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com