C# 正则表达式-根据特定条件去掉额外的标记

C# 正则表达式-根据特定条件去掉额外的标记,c#,regex,C#,Regex,我正在使用第三方工具生成HTML,如下所示[这只是一个长页面的示例HTML,但模式相同]: <P> <SPAN> <SPAN>This is </SPAN> </SPAN> <SPAN STYLE="font-weight:bold;"> <SPAN>some</SPAN> </SPAN> <SPAN>

我正在使用第三方工具生成HTML,如下所示[这只是一个长页面的示例HTML,但模式相同]:

<P>
    <SPAN>
        <SPAN>This is </SPAN>
    </SPAN>
    <SPAN STYLE="font-weight:bold;">
        <SPAN>some</SPAN>
    </SPAN>
    <SPAN>
        <SPAN> text.</SPAN>
    </SPAN>
</P>

我想我可能需要更多的步骤,因此我的变量命名,但有一种模式重复工作:

var p1 = new Regex(@"\s*<span>(?<text>.+?)</span>\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = src;
while (s1.IsMatch(p1))
    s1 = p1.Replace(s1, "${text}");
var p1=new Regex(@“\s*(?。+?)\s*”,RegexOptions.IgnoreCase|RegexOptions.Singleline|RegexOptions.Compiled);
var s1=src;
而(s1.IsMatch(p1))
s1=p1.替换(s1,“${text}”);
注意:如果模式是精确的,您可以通过在开头和结尾添加量词来实现,而无需循环:

var p1 = new Regex(@"(?:\s*<span>)+(?<text>.+?)(?:</span>\s*)+", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = p1.Replace(src, "${text}");
var p1=new Regex(@“(?:\s*)+(?:\s*)+”,RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1=p1.Replace(src,“${text}”);

HTML与给定正则表达式的关系如何?@revo感谢您指出我的输入错误。我刚刚纠正了它。在给定的正则表达式中,它是
span
标记,而不是
test
标记。我认为最好删除正则表达式,改用HtmlAgilityPack。无论您选择什么,这都是一项工作,因为您的输出在结构上与您的输入不同。请允许我发布强制性链接:
var p1 = new Regex(@"\s*<span>(?<text>.+?)</span>\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = src;
while (s1.IsMatch(p1))
    s1 = p1.Replace(s1, "${text}");
var p1 = new Regex(@"(?:\s*<span>)+(?<text>.+?)(?:</span>\s*)+", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = p1.Replace(src, "${text}");