PowerShell中的条件正则表达式搜索和替换
问题描述:
我试图在PowerShell中以递归方式搜索和替换多个xml文件。我想避免脚本替换某些匹配文本的匹配。PowerShell中的条件正则表达式搜索和替换
例如,如果你把下面的示例XML
<title>this is a web-site</title>
<subtitle>web-site experience</subtitle>
<path>c:/web-site/web-site.xml</path>
</doc>
应剧本后
<title>this is a new-site</title>
<subtitle>new-site experience</subtitle>
<path>c:/web-site/web-site.xml</path>
</doc>
如果你看到上面我想忽略串/ web的改变以下网站/和/网站。
我正在尝试使用OR运算符并忽略并替换下面的代码,但它似乎没有帮助。
$content -replace '(^|[^/])web-site([^/]|$)|(^|[^/])web-site([^.]|$)', '$1new-Site$2' |
Out-File $file.FullName -Encoding utf8
你可以让我知道如何使用条件或多个条件
答
由于它是XML,我建议解析这个文件,如XML。看看下面的代码片段:
$xml = [xml]"<doc>
<title>this is a web-site 1</title>
<title>this is a web-site 2</title>
<subtitle>web-site experience</subtitle>
<path>c:/web-site/web-site.xml</path>
</doc>"
$xml.doc.SelectNodes("title") | % { $_.InnerText = $_.InnerText.Replace("web-site", "new-site") }
$xml.doc.title
+0
不幸的是我不能使用节点解析,因为有许多不同的节点可以匹配。所以相反,我正在寻找像上面那样的正则表达式 – user2628187
你可能应该选择使用e的xml节点。 G。 xpath然后更改内容? –
我不知道我是否正确理解你。由于它是xml文档 - 你是否想忽略标题以外的节点? –
这只是你以前的问题的一个小的变化。 –