gpt4 book ai didi

regex - 如何在Powershell中为替换运算符转义美元和花括号

转载 作者:行者123 更新时间:2023-12-03 01:02:41 25 4
gpt4 key购买 nike

假设我有一个基于XML的模板字符串,在其中必须替换自制的模板标记:

 $template = '<Foo Name="${BAZ}">'

我想将文字 ${BAZ}替换为一个值。我认为使用区分大小写的 -creplace运算符是个好主意。就像给定的一样,我既有没有附加修饰符的简单参数名称( BAZ)( ${ })及其值(42):
 $param = 'BAZ'
$value = 42

因此,我首先使用 -f导出我的替换字符串,以将参数名称与其“标记”混合,同时小心地在格式字符串中转义文字 {}:
 $needle = '${{{0}}}' -f $param 
# ${BAZ}
# at least when printed...

现在到最后一幕:
 $template -creplace $needle, $value
# <Foo Name="${BAZ}">
# so $needle does not seem to match the string '${BAZ}'

我似乎错过了(或过度补偿了)介于两者之间的某处逃逸……有人可以把我从这块冰上拉下来吗? (我尝试过使用退格键,反引号,单引号和双引号的字符串的许多组合。仅出于上下文考虑:在我的真实脚本中, $template是通过 $template = Get-Content "template-file.xml"的大型多行字符串,我希望它不是根源。)

编辑:经过更多的寻找,我找到了一个可行的解决方案:通过放弃 -creplace来支持.net的 Replace()方法,上述 $needle与模板匹配:
 $template.Replace($needle, $value)
# <Foo Name="42"/>

因此,我很高兴收到任何答案,这些答案可以阐明 -creplace不合作的原因,以及我可以做些什么。

最佳答案

-replace是用于替换正则表达式的运算符。 -creplace仅使此正则表达式区分大小写。您遇到的问题是正则表达式本身,因为某些字符在正则表达式中起特殊作用。

您想要做的是转义此类字符:

 $template -replace [regex]::escape($needle), $value

转义的模式将如下所示: \$\{BAZ}

关于regex - 如何在Powershell中为替换运算符转义美元和花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53721407/

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