正则expression式去除HTML标签

我正在使用以下正则expression式从string中删除html标记。 它工作,除了我离开结束标签。 如果我尝试删除: <a href="blah">blah</a>则会留下<a/>

我不知道正则expression式的语法,并摸索了这一点。 可以有RegEx知识的人请给我一个模式,将工作。

这是我的代码:

  string sPattern = @"<\/?!?(img|a)[^>]*>"; Regex rgx = new Regex(sPattern); Match m = rgx.Match(sSummary); string sResult = ""; if (m.Success) sResult = rgx.Replace(sSummary, "", 1); 

我正在寻找删除的第一次出现的<a><img>标签。

使用正则expression式parsingHTML是充满陷阱的。 HTML不是一个正规的语言,因此不能用正则expression式正确parsing100%。 这只是你遇到的许多问题之一。 最好的方法是使用HTML / XMLparsing器为您做这个。

这里是一个博客文章的链接,我写了一段时间回到这个问题的更多细节。

这就是说,这是一个解决scheme,应该解决这个特定的问题。 它绝不是一个完美的解决scheme。

 var pattern = @"<(img|a)[^>]*>(?<content>[^<]*)<"; var regex = new Regex(pattern); var m = regex.Match(sSummary); if ( m.Success ) { sResult = m.Groups["content"].Value; 

要这样做:

 '<td>mamma</td><td><strong>papa</strong></td>' 

进入这个:

 'mamma papa' 

您需要用空格replace标签:

 .replace(/<[^>]*>/g, ' ') 

并减less任何重复的空间到单个空间:

 .replace(/\s{2,}/g, ' ') 

然后修剪前后空格:

 .trim(); 

这意味着您的删除标记function如下所示:

 function removeTags(string){ return string.replace(/<[^>]*>/g, ' ') .replace(/\s{2,}/g, ' ') .trim(); } 

所以每个人都在谈论的HTMLparsing器是Html Agility Pack 。

如果它是干净的XHTML,也可以使用System.Xml.Linq.XDocumentSystem.Xml.XmlDocument

你可以使用已经存在的库去掉html标签。 一个好的是奇尔卡特C#库 。

为了删除标签之间的空格,可以使用下面的方法在inputhtml的开始和结束处使用正则expression式和trim的组合:

  public static string StripHtml(string inputHTML) { const string HTML_MARKUP_REGEX_PATTERN = @"<[^>]+>\s+(?=<)|<[^>]+>"; inputHTML = WebUtility.HtmlDecode(inputHTML).Trim(); string noHTML = Regex.Replace(inputHTML, HTML_MARKUP_REGEX_PATTERN, string.Empty); return noHTML; } 

所以对于以下input:

  <p> <strong> <em><span style="text-decoration:underline;background-color:#cc6600;"></span><span style="text-decoration:underline;background-color:#cc6600;color:#663333;"><del> test text </del></span></em></strong></p><p><strong><span style="background-color:#999900;"> test 1 </span></strong></p><p><strong><em><span style="background-color:#333366;"> test 2 </span></em></strong></p><p><strong><em><span style="text-decoration:underline;background-color:#006600;"> test 3 </span></em></strong></p> 

输出将只是html之前或之后html标签之间没有空格的文本:“test text test 1 test 2 test 3”。

请注意, test text之前的空格来自<del> test text </del> html, test 3之后的空格来自<em><span style="text-decoration:underline;background-color:#006600;"> test 3 </span></em></strong></p> html。

可以使用:

 Regex.Replace(source, "<[^>]*>", string.Empty); 

这是我已经使用了很长一段时间的扩展方法。

 public static class StringExtensions { public static string StripHTML(this string htmlString, string htmlPlaceHolder) { const string pattern = @"<(.|\n)*?>"; string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder); sOut = sOut.Replace("&nbsp;", String.Empty); sOut = sOut.Replace("&amp;", "&"); sOut = sOut.Replace("&gt;", ">"); sOut = sOut.Replace("&lt;", "<"); return sOut; } } 

使用c#中的正则expression式从string中删除图像(由图像ID执行的图像search)

 string PRQ=<td valign=\"top\" style=\"width: 400px;\" align=\"left\"><img id=\"llgo\" src=\"http://test.Logo.png\" alt=\"logo\"></td> var regex = new Regex("(<img(.+?)id=\"llgo\"(.+?))src=\"([^\"]+)\""); PRQ = regex.Replace(PRQ, match => match.Groups[1].Value + ""); 

为什么不尝试不情愿的量词? htmlString.replaceAll("<\\S*?>", "")

(这是Java,但主要是显示这个想法)

以下是我使用简单的正则expression式从string中删除HTML标记的扩展方法:

 /// <summary> /// Converts an Html string to plain text, and replaces all br tags with line breaks. /// </summary> /// <returns></returns> /// <remarks></remarks> [Extension()] public string ToPlainText(string s) { s = s.Replace("<br>", Constants.vbCrLf); s = s.Replace("<br />", Constants.vbCrLf); s = s.Replace("<br/>", Constants.vbCrLf); s = Regex.Replace(s, "<[^>]*>", string.Empty); return s; } 

希望有所帮助。