2011-03-21 71 views
0

我有这样的代码块:删除代码片断

<Compile Include="Share\System\Master\Relative\RelativeList.aspx.designer.cs"> 
    <DependentUpon>RelativeList.aspx</DependentUpon> 
</Compile> 
<Compile Include="Share\System\Master\Status\StatusInfo.aspx.cs"> 
    <DependentUpon>StatusInfo.aspx</DependentUpon> 
    <SubType>ASPXCodeBehind</SubType> 
</Compile> 
<Compile Include="Share\System\Master\Status\StatusInfo.aspx.designer.cs"> 
    <DependentUpon>StatusInfo.aspx</DependentUpon> 
</Compile> 
<Compile Include="Share\System\Master\Status\StatusList.aspx.cs"> 
    <DependentUpon>StatusList.aspx</DependentUpon> 
    <SubType>ASPXCodeBehind</SubType> 
</Compile> 

我想删除所有的块代码类似于:

<Compile Include="Share\System\Master\Relative\RelativeList.aspx.designer.cs"> 
    <DependentUpon>RelativeList.aspx</DependentUpon> 
</Compile> 

我的意思是它开始与<Compile,包含.aspx.designer.cs并以</Compile>

结束所以,当我删除所有这样的代码块时,所有仍然会是这样的:

<Compile Include="Share\System\Master\Status\StatusInfo.aspx.cs"> 
    <DependentUpon>StatusInfo.aspx</DependentUpon> 
    <SubType>ASPXCodeBehind</SubType> 
</Compile> 
<Compile Include="Share\System\Master\Status\StatusList.aspx.cs"> 
    <DependentUpon>StatusList.aspx</DependentUpon> 
    <SubType>ASPXCodeBehind</SubType> 
</Compile> 

因为我转换了一个网站,Web应用程序,所以我必须删除所有design.cs页面并重新创建它们,这样的错误重复控件不会发生。

事情是我有很多的网页:((

感谢提前:)

更新:我使用快速查找和Visual Studio中更换

回答

0

你会想切换正则表达式匹配成单行模式这一点。

Regex.Replace(
    input, 
    @"<Compile Include=""[^""]*""(?<=aspx.designer.cs"").*?</Compile>", 
    "", 
    RegexOptions.Singleline); 

一般情况下,正则表达式是不是一个好的选择用于解析XML。最好只加载XML文档并过滤/删除所需的节点。

但是,在这个例子中,正则表达式可以做你想做的事情,因为文档的结构相对简单。它首先查找Compile open标签,然后在Include中找到文件名。它将匹配文件名直到找到双引号。然后它会返回并确保它匹配的最后一个字符是aspx.designer.cs"。然后它会懒惰地寻找结束的编译标记,以防止吞噬整个文件的其余部分。

编辑:我不认为你可以在Visual Studio查找/替换对话框中执行此操作。据我所知,你不能切换到单线模式。每当我尝试提供(?s)它开始只是不匹配任何东西。所以没有办法从打开的Compile标签捕获到关闭的Compile标签。这似乎也看起来后脑也不行。

为什么不使用PowerShell?您可以将上述内容提供给PowerShell。

[Regex]::Replace($(cat .\XMLFile1.xml), '<Compile Include="[^"]*"(?<=aspx\.designer\.cs").*?</Compile>', "", "Singleline"); 
+0

谢谢,但这不适用于我:(我已更新问题中的一些信息 – 2011-03-21 11:46:39