正则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.XDocument
或System.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(" ", String.Empty); sOut = sOut.Replace("&", "&"); sOut = sOut.Replace(">", ">"); sOut = sOut.Replace("<", "<"); 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; }
希望有所帮助。