用 Powershell 中的另一个字符串替换带有换行符的字符串

Replace string with line break with another string in Powershell

我要更换

$fieldTool.GetFieldValue($i
    tem,"Title")

{{(sc_get_field_value i_item 'Title')}}

原始字符串有一个换行符,我正在使用 'n 这样 $fieldTool.GetFieldValue($i'ntem,"Title")

这是代码

  $template = '<div class="tile-inspiration__title field-title">$fieldTool.GetFieldValue($i
  tem,"Title")</div>'
  $matchString = '$fieldTool.GetFieldValue($i'ntem,"Title")'
  $pattern = $([regex]::escape($matchString))
  $replaceString = "{{(sc_get_field_value i_item 'Title')}}"
  $newtemplate = $template -replace $pattern, $replaceString
  Write-Host $newtemplate

以上代码无效。如何用另一个字符串替换带换行符的字符串。

如有任何建议,我们将不胜感激。

提前致谢

要替换换行符,您应该使用正则表达式模式 \r?\n。这将同时匹配 *nix 和 Windows 换行符。

然而,在您的模板字符串中,有多个字符在正则表达式中具有特殊含义,因此您需要执行 [regex]::Escape(),但这也会错误地转义字符 \r?\n,将其呈现为\r\?\n,所以在 $matchString before 中添加它是没有用的。

您可以先手动将换行符替换为 $matchString 中不存在且在正则表达式中没有特殊含义的字符。

$template = '<div class="tile-inspiration__title field-title">$fieldTool.GetFieldValue($i
tem,"Title")</div>'
# for demo, I chose to replace the newline with an underscore
$matchString = '$fieldTool.GetFieldValue($i_tem,"Title")'
# now, escape the string and after that replace the underscore by the wanted \r?\n pattern
$pattern = [regex]::escape($matchString) -replace '_', '\r?\n'
# $pattern is now: $fieldTool\.GetFieldValue\($i\r?\ntem,"Title"\)
$replaceString = "{{(sc_get_field_value i_item 'Title')}}"

# this time, the replacement should work
$newtemplate = $template -replace $pattern, $replaceString
Write-Host $newtemplate  # --> <div class="tile-inspiration__title field-title">{{(sc_get_field_value i_item 'Title')}}</div>