我正在寻找一个可以删除保留内部文本的所有跨度的正则表达式。我的内部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'><%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%>
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中执行此操作
答案 0 :(得分:3)
您可以使用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.Replace
或Regex.Replace
或分割/连接方法,具体取决于你真正需要的。