在 Powershell 脚本中,我有 Hashtable 包含个人信息。哈希表看起来像
{first = "James", last = "Brown", phone = "12345"...}
使用此哈希表,我想替换模板文本文件中的字符串。对于每个字符串匹配 @key @ 格式,我想将此字符串替换为与哈希表中的键对应的值。以下是输入和输出示例:
input.txt中
My first name is @first@ and last name is @last@.
Call me at @phone@
output.txt的
My first name is James and last name is Brown.
Call me at 12345
你能告诉我如何返回"关键" " @" s 之间的字符串,所以我可以找到字符串替换函数的值?欢迎任何其他关于这个问题的想法。
答案 0 :(得分:3)
你可以用纯正则表达式做到这一点,但为了便于阅读,我喜欢这样做比正则表达式更多的代码:
$tmpl = 'My first name is @first@ and last name is @last@.
Call me at @phone@'
$h = @{
first = "James"
last = "Brown"
phone = "12345"
}
$new = $tmpl
foreach ($key in $h.Keys) {
$escKey = [Regex]::Escape($key)
$new = $new -replace "@$escKey@", $h[$key]
}
$new
$tmpl
包含模板字符串。
$h
是哈希表。
$new
将包含替换的字符串。
$escKey
个字符所包围的$escKey
。执行此操作的一个好处是您可以更改哈希表和模板,而不必更新正则表达式。它还可以优雅地处理密钥在模板中没有相应的可替换部分的情况(反之亦然)。
答案 1 :(得分:2)
您可以使用expandable(双引号)here-string创建模板:
$Template = @"
My first name is $($hash.first) and last name is $($hash.last).
Call me at $($hash.phone)
"@
$hash = @{first = "James"; last = "Brown"; phone = "12345"}
$Template
My first name is James and last name is Brown.
Call me at 12345