我正在尝试编写一个循环,用于将字符串与字典中的键进行匹配。
我正在尝试将app.config文件中的每个字符串与字典中的每个键进行匹配。例如,有一个名为“client”的字符串,我必须将此字符串与字典中的所有键匹配。 如果字符串匹配,则将值“Arizona”替换为app.config文件中的字符串,否则跳过。
有人可以建议我写一下匹配和替换的循环。
答案 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")
......等等。