假设我有一个字符串
$t = "some {great} vacation that {we} had that {year}"
我希望用编号值替换占位符:
"某些{0}假期{1}拥有{2}"
我预计会有一个替代品:
$i = 0; $t -replace "{.*?}", "{$([string] ++$i)}"
但我得到的是:
" {1}拥有{1}"
的{1}个假期
好像该字符串仅被评估一次。在perl正则表达式中,有一种方法可以为替换值指定一个函数......这是如何在psh中完成的?
答案 0 :(得分:3)
试试这个:
$i = 0 ; [Regex]::Matches($t,"{.*?}") | %{ ++$i ; $t = $t.Replace($_.Value,"{$i}") } ; $t
我认为问题在于Regex引擎永远不会为找到的每个匹配获得$ i的新值,所以每次递增它时,$i
都是0
。
答案 1 :(得分:-1)
我无法找到使用-replace
运算符执行此操作的方法,因此我不得不求助于.net - 这是一个执行此功能的函数:
function nrep($s) {
$script:i = 0
$fn = {"[$([string] $script:i++)]"}
[regex]::replace($s, '{.*?}', $fn)
}