以下 Powershell 用正则表达式中的命名组 s1 和 s2 替换操作(仅用于说明,不是正确的语法)工作正常:
$s -Replace "(?<s1>....)(?<s2>...)" '${s2}xxx${s1}'
我的问题是:如何用变量 $x 而不是文字 xxx 替换,即类似于:
$s -Replace "(?<s1>....)(?<s2>...) '${s2}$x${s1}'
这不起作用,因为 Powershell 不会替换单引号字符串中的变量,但是如果替换字符串放在像“${s2}$x${s1}”这样的双引号中,则命名组解析不再起作用。
最佳答案
@PetSerAl 评论是正确的,这里是测试它的代码:
$sep = ","
"AAA BBB" -Replace '(?<A>\w+)\s+(?<B>\w+)',"`${A}$sep`${B}"
输出 :
AAA,BBB
说明 :
Powershell 将评估双引号字符串,用反勾转义 $ 符号将确保不评估这些并为 -Replace 运算符提供有效字符串。
或通过
Get-Help about_escape
& Get-Help about_comparison_operators
关于regex - 带有命名组的替换字符串中的 Powershell 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30543753/