c# Regex提取HTML文本

本文关键字:文本 HTML 提取 Regex | 更新日期: 2023-09-27 18:05:55

我有一个HTML字符串,我只是想从文本:

string html = "<span class="MyText" id="1">     SomeText blah blah</span>";

所以我使用下面的表达式:

public static string StripHTMLTags(string source)
{
    return Regex.Replace(source, "<.*?>", string.Empty);
}

但有时HTML字符串包含几行HTML:

string html = "<span class="MyText" id="1">SomeText blah blah</span<br><span class="MyText" id="2">SomeText blah blah 1</span><br><span class="MyText" id="2">SomeText blah blah2</span>";

所以现在我想提取出<span>标签之间的文本,并将它们存储在列表或数组或行中。

注意:我正在解析自定义HTML,将只有两个标签 break和span标签。

我如何使用正则表达式做到这一点?

c# Regex提取HTML文本

用Regex解析HTML很麻烦而且容易出错。看看相当著名的StackOverflow post RegEx匹配打开标签,除了XHTML自包含标签。

我建议使用库。其中一个被广泛使用的是Html敏捷包,网址为http://html-agility-pack.net,可通过Nuget获得。

编辑:

为了获得HTML的内部文本,你可以使用这样的东西:

var pageDoc = new HtmlDocument();
pageDoc.LoadHtml(pageContent);
var pageText = pageDoc.DocumentNode.InnerText;

我不知道是否可以用不同的REGEX语句解决这个问题(只是不太了解正则表达式),但是您可以做的是每次出现"><"时拆分字符串,然后提取每个子字符串的文本。

http://regexr.com/也可以帮助您尝试不同的语句。

编辑:总是有一个'
' after a '"?

如果在非私有应用程序中运行,请注意。如我所说:

HTML不够规则,不能用正则表达式解析

但是,这个简单的HTML片段可以用以下代码解析:

string txt =
    @"""<span class=""MyText"" id=""1"">SomeText blah blah</span<br><span class=""MyText"" id=""2"">SomeText blah blah 1</span><br><span class=""MyText"" id=""2"">SomeText blah blah2</span>""";
var matches = Regex.Matches(txt, "(?<=>)([^<]+)(?=<)");
foreach (Match match in matches)
    Console.WriteLine(match.Value);

收益率:

SomeText blah blah
SomeText blah blah 1
SomeText blah blah2