gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:35:07 25 4
gpt4 key购买 nike

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

我有一个名为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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com