我试图在字符串中找到正则表达式模式并使用哈希表替换它。第一个例子工作正常,我得到“$$ 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,但似乎无法弄清楚如何正确地执行此操作。
答案 0 :(得分:1)
似乎我自己想出来了,不得不使用这样的脚本块:
$replaced2 = [regex]::Replace($testString, '(\$\$(.*?)\$\$)', { $hashtable.Get_Item($args[0].Value) } )
更多信息: http://www.powershelladmin.com/wiki/Powershell_regular_expressions#Match_Evaluator