将字符串与键匹配,并使用PowerShell替换值

时间:2016-04-25 16:25:56

标签: powershell

我正在尝试编写一个循环,用于将字符串与字典中的键进行匹配。

我正在尝试将app.config文件中的每个字符串与字典中的每个键进行匹配。例如,有一个名为“client”的字符串,我必须将此字符串与字典中的所有键匹配。 如果字符串匹配,则将值“Arizona”替换为app.config文件中的字符串,否则跳过。

有人可以建议我写一下匹配和替换的循环。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,那么就没有理由在这里使用Regex.Replace。 String.Replace可能更好,因为你想匹配文字字符串值。

关于哈希表的奇怪之处在于它们比数组更难枚举,所以它们对foreach或ForEach-Object的提取有点尴尬。

尝试这样的事情:

foreach ($Key in $HashTable.Keys) {
    $FieldName = '{{' + $Key.ToString() + '}}';
    $FieldValue = $HashTable.Item($Key).ToString();
    $AppConfig = $AppConfig.Replace($FieldName, $FieldValue);
}

或者你可以使用它:

foreach ($Hash in $HashTable.GetEnumerator()) {
    $FieldName = '{{' + $Hash.Key.ToString() + '}}';
    $FieldValue = $Hash.Value.ToString();
    $AppConfig = $AppConfig.Replace($FieldName, $FieldValue);
}

两者都应该有用。您必须指定GetEnumerator()方法,因为哈希表通常不是枚举对象。

答案 1 :(得分:0)

脚本的简单实现如下所示。我已经测试了你成功指定的输入。

[regex]::Replace($appConfigFile, "{{(\w*)}}",{param($match) $dictionaryObject[$($match.Groups[1].Value)]})

<强>假设下, $ appConfigFile具有App.Config文件的内容,$ dictionaryObject已创建如下:

$dictionaryObject = @{}
$dictionaryObject.Add("client","Arizona") 
$dictionaryObject.Add("type","Test")

......等等。

参考: Regex.Replace Method (String, MatchEvaluator)