我有一个非常棘手的问题。
我有一个名为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
当我运行脚本时,它输出到控制台上似乎没有任何更改。
有人可以帮帮我吗
注意:错字已修正
答案 0 :(得分:1)
这里有三个主要问题:
.
与换行符不匹配$
符号。或使用简单的字符串.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)
。