如何删除所有HTML标记,包括在C#中使用正则表达式。我的字符串看起来像
"<div>hello</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div>"
答案 0 :(得分:186)
如果您不能使用面向HTML解析器的解决方案来过滤掉标签,那么这里就是一个简单的正则表达式。
string noHTML = Regex.Replace(inputHTML, @"<[^>]+>| ", "").Trim();
理想情况下,您应该再次通过正则表达式过滤器来处理多个空格
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
答案 1 :(得分:30)
我采用了@Ravi Thapliyal的代码并制定了一个方法:它很简单,可能无法清理所有内容,但到目前为止它正在做我需要做的事情。
public static string ScrubHtml(string value) {
var step1 = Regex.Replace(value, @"<[^>]+>| ", "").Trim();
var step2 = Regex.Replace(step1, @"\s{2,}", " ");
return step2;
}
答案 2 :(得分:16)
我一直在使用这个功能。删除几乎任何乱七八糟的HTML,你可以抛出它并使文本保持原样。
private static readonly Regex _tags_ = new Regex(@"<[^>]+?>", RegexOptions.Multiline | RegexOptions.Compiled);
//add characters that are should not be removed to this regex
private static readonly Regex _notOkCharacter_ = new Regex(@"[^\w;&#@.:/\\?=|%!() -]", RegexOptions.Compiled);
public static String UnHtml(String html)
{
html = HttpUtility.UrlDecode(html);
html = HttpUtility.HtmlDecode(html);
html = RemoveTag(html, "<!--", "-->");
html = RemoveTag(html, "<script", "</script>");
html = RemoveTag(html, "<style", "</style>");
//replace matches of these regexes with space
html = _tags_.Replace(html, " ");
html = _notOkCharacter_.Replace(html, " ");
html = SingleSpacedTrim(html);
return html;
}
private static String RemoveTag(String html, String startTag, String endTag)
{
Boolean bAgain;
do
{
bAgain = false;
Int32 startTagPos = html.IndexOf(startTag, 0, StringComparison.CurrentCultureIgnoreCase);
if (startTagPos < 0)
continue;
Int32 endTagPos = html.IndexOf(endTag, startTagPos + 1, StringComparison.CurrentCultureIgnoreCase);
if (endTagPos <= startTagPos)
continue;
html = html.Remove(startTagPos, endTagPos - startTagPos + endTag.Length);
bAgain = true;
} while (bAgain);
return html;
}
private static String SingleSpacedTrim(String inString)
{
StringBuilder sb = new StringBuilder();
Boolean inBlanks = false;
foreach (Char c in inString)
{
switch (c)
{
case '\r':
case '\n':
case '\t':
case ' ':
if (!inBlanks)
{
inBlanks = true;
sb.Append(' ');
}
continue;
default:
inBlanks = false;
sb.Append(c);
break;
}
}
return sb.ToString().Trim();
}
答案 3 :(得分:4)
var noHtml = Regex.Replace(inputHTML, @"<[^>]*(>|$)| |‌|»|«", string.Empty).Trim();
答案 4 :(得分:0)
这样:
(<.+?> | )
将匹配任何代码或
string regex = @"(<.+?>| )";
var x = Regex.Replace(originalString, regex, "").Trim();
然后x = hello
答案 5 :(得分:0)
清理Html文档涉及许多棘手的事情。这个包可能有帮助: https://github.com/mganss/HtmlSanitizer
答案 6 :(得分:0)
HTML的基本形式只是XML。您可以在XmlDocument对象中解析文本,并在根元素上调用InnerText来提取文本。这将删除任何形式的所有HTML tages,并处理特殊字符,如&amp; lt; &安培; NBSP;一气呵成。
答案 7 :(得分:0)
我使用了@RaviThapliyal和@Don Rolling的代码,但做了一些修改。由于我们将&nbsp替换为空字符串,而应将&nbsp替换为空格,因此添加了额外的步骤。它像魅力一样对我有效。
public static string FormatString(string value) {
var step1 = Regex.Replace(value, @"<[^>]+>", "").Trim();
var step2 = Regex.Replace(step1, @" ", " ");
var step3 = Regex.Replace(step2, @"\s{2,}", " ");
return step3;
}
使用&nbps时不使用分号,因为它已由堆栈溢出格式化。
答案 8 :(得分:-1)
def clean(self):
try:
printer_profile = self.printer_profile
except ObjectDoesNotExist:
pass
else:
...code to validate address...
你可以在这里测试一下: https://regex101.com/r/kB0rQ4/1