Powershell正则表达式替换 - 使用$ 1作为字典键

时间:2015-09-24 00:53:48

标签: regex powershell replace powershell-v2.0

我试图在字符串中找到正则表达式模式并使用哈希表替换它。第一个例子工作正常,我得到“$$ oldstring $$ $$ oldstring $$”作为结果。我无法弄清楚如何将'$ 1'作为键传递到哈希表中,以便用我哈希中与该键对应的值替换它。

这是我的代码:

$hashtable = @{'$$oldstring$$' = 'newstring'}

$testString = '$$oldstring$$'

$replaced = [regex]::Replace($testString, '(\$\$(.*?)\$\$)', '$1 $1')
$replaced

$replaced2 = [regex]::Replace($testString, '(\$\$(.*?)\$\$)', $hashtable.Get_Item($1))
$replaced2

输出:

$$oldstring$$ $$oldstring$$

Exception calling "get_Item" with "1" argument(s): "Key cannot be null.
Parameter name: key"

我知道$ hashtable.Get_Item($ 1)是无效的语法,$ 1在这里是null,但似乎无法弄清楚如何正确地执行此操作。

1 个答案:

答案 0 :(得分:1)

似乎我自己想出来了,不得不使用这样的脚本块:

$replaced2 = [regex]::Replace($testString, '(\$\$(.*?)\$\$)', { $hashtable.Get_Item($args[0].Value) } )

更多信息: http://www.powershelladmin.com/wiki/Powershell_regular_expressions#Match_Evaluator