Skip to main content
 首页 » 编程设计

c#之正则表达式从 HTML 中删除所有跨度,保持内部文本不变

2024年06月03日14fff_TT

我正在寻找一个正则表达式,它可以删除所有跨度并保留内部文本。我的内部 HTML 中有这种跨度。

输入

格式正确的 HTML

 <span style='font-size:10.0pt;font-family:"Arial","sans serif"'**> 
            First span 
        </span> 
        <span style="color:#221E1F;"> 
        <span style='font-size:10.0pt;font-family:"Arial";color:windowtext'> 
        This is to test Regular expression 
        </span> 
        </span> 
        <span style="color:#221E1F;"><span style='font-size:10.0pt;font-family: 
                "Arial","sans-serif";color:#548DD4'> 
        last Span  text 
        </span> 
        </span> 

格式不正确:

 <span style='font-size:10.0pt;font-family:"Arial","sans-serif"; 
    mso-bidi-font-style:italic'>&lt;%T</span><span class="A1"><span style='font-size: 
    10.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family:Calibri; 
    mso-fareast-theme-font:minor-latin;color:windowtext'>PA_Enrollment_Options%&gt; 
    one of the convenient options below</span></span><span class="A1"><span style='font-size:10.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 
    Calibri;mso-fareast-theme-font:minor-latin;color:#548DD4;mso-themecolor:text2; 
    mso-themetint:153'>: <o:p></o:p></span></span> 

预期输出:第一个跨度这是测试正则表达式最后跨度文本

我试过这个正则表达式 - (<span.*([\r\n]).*>)|(<span.*>)|(</span>).

这在我的 HTML 格式正确时有效,但在我的情况下 HTML 缩进不正确。

我没有使用正则表达式来完全解析。我仅在内部 html 中执行此操作

请您参考如下方法:

您可以使用 HtmlAgilityPack 正确地做到这一点:

public string getCleanHtml(string html) 
{ 
    var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(html); 
    // return HtmlAgilityPack.HtmlEntity.DeEntitize(doc.DocumentNode.InnerText); // Use if you want to convert HTML entities to their literal view 
    return doc.DocumentNode.InnerText; // if you want to keep HTML entities 
} 

然后

var result = getCleanHtml(myInputHtml); 

这是输出:

如果您需要去除空格,您可以使用简单的 String.ReplaceRegex.Replace 或 split/join 方法,具体取决于什么你确实需要。