regex - 带有命名组的替换字符串中的 Powershell 变量

标签 regex powershell replace

以下 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 运算符提供有效字符串。
  • msdn about replace operator
  • msdn about escape characters

  • 或通过 Get-Help about_escape & Get-Help about_comparison_operators

    关于regex - 带有命名组的替换字符串中的 Powershell 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30543753/

    相关文章:

    c++ - 如何提取for循环体?

    javascript - 仅当字符串后面没有左方括号时才替换字符串,即 [

    php - 检查字符串是否以特定单词开头,如果是则拆分

    python - 找不到关于 Python 的 read() 方法的任何信息 (python 2.7)

    powershell - 如何使用powershell删除所有临时文件

    powershell - 为什么 $false -eq ""是真的?

    r - 如何用R中的表映射替换值

    Java REGEX,从字符串中删除两种不同类型的注释

    regex - 使用 xpath 或 regexp 设置 import.io 爬虫