使用命名组的替换字符串中的PowerShell变量

6
以下是使用命名组s1和s2在正则表达式中进行Powershell替换操作的示例(仅供说明,不是正确的语法):

以下是使用命名组s1和s2在正则表达式中进行Powershell替换操作的示例(仅供说明,不是正确的语法):

$s -Replace "(?<s1>....)(?<s2>...)" '${s2}xxx${s1}'

我的问题是:如何使用变量$x代替文字xxx,也就是像这样:
$s -Replace "(?<s1>....)(?<s2>...) '${s2}$x${s1}'

这并不起作用,因为Powershell在单引号字符串中不会替换变量,但如果将替换字符串放在双引号中,像这样"${s2}$x${s1}",则命名组解析将不再起作用。


1
"`${s2}$x`${s1}" - user4003407
谢谢,非常完美!当你有答案时,一切都变得清晰明了;-) - user957479
1个回答

4

@PetSerAl的评论是正确的,这里是测试代码:

$sep = ","
"AAA BBB" -Replace '(?<A>\w+)\s+(?<B>\w+)',"`${A}$sep`${B}"

输出: AAA,BBB

解释:

Powershell会评估双引号字符串,使用反引号转义$符号将确保它们不被评估,并提供有效的字符串用于-Replace运算符。

或通过Get-Help about_escapeGet-Help about_comparison_operators获得帮助。


2
你是我还有头发的原因,伙计。谢谢你! - Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接