regex - 在两个字符串Powershell之间替换文本

标签 regex powershell replace file-get-contents

我有一个问题,我几乎坚持了下来。

我有一个名为xml_data.txt的文件和另一个名为entry.txt的文件

我想替换<core:topics> and </core:topics>之间的所有内容

我写了下面的脚本

$test = Get-Content -Path ./xml_data.txt
$newtest = Get-Content -Path ./entry.txt
$pattern = "<core:topics>(.*?)</core:topics>"
$result0 = [regex]::match($test, $pattern).Groups[1].Value
$result1 = [regex]::match($newtest, $pattern).Groups[1].Value
$test -replace $result0, $result1

当我运行脚本时,它输出到控制台上似乎没有进行任何更改。

有人可以帮我吗

注意:错字错误已修复

最佳答案

这里有三个主要问题:

  • 您逐行读取文件,但是文本块是多行字符串
  • 您的正则表达式与换行符不匹配,因为默认情况下.与换行符不匹配
  • 同样,文字正则表达式模式在用动态替换模式替换时必须始终用美元转义$符号。或使用简单的字符串.Replace

  • 所以,你需要
  • 将整个文件读入单个变量$test = Get-Content -Path ./xml_data.txt -Raw
  • 使用$pattern = "(?s)<core:topics>(.*?)</core:topics>"正则表达式(可以通过将其展开到<core:topics>([^<]*(?:<(?!</?core:topics>).*)*)</core:topics>来增强它的作用,以防万一它工作得太慢)
  • 使用$test -replace [regex]::Escape($result0), $result1.Replace('$', '$$')来“保护”替换中的$字符或$test.Replace($result0, $result1)
  • 关于regex - 在两个字符串Powershell之间替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57572536/

    相关文章:

    Javascript 替换功能不适用于正则表达式

    ruby - 如何使用 Ruby 替换字符串中每次出现的模式?

    python - 将数字与字母分开的正则表达式

    php - 使用 PHP 确保字符串只包含数字、字母和下划线?

    php - 用于捕获最小组的正则表达式

    powershell - 如何只搜索整个单词而不应该存在?

    javascript - 在 Javascript/PHP 中传递数据并替换

    javascript - 在不被引号包围的情况下用空格和句号拆分字符串

    node.js - Windows powershell 中的 NODE_ENV 返回未定义

    powershell - 单选按钮 - Powershell