PowerShell中的条件正则表达式搜索和替换

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 

你可以让我知道如何使用条件或多个条件

+0

你可能应该选择使用e的xml节点。 G。 xpath然后更改内容? –

+0

我不知道我是否正确理解你。由于它是xml文档 - 你是否想忽略标题以外的节点? –

+0

这只是你以前的问题的一个小的变化。 –

由于它是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