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标签。
我如何使用正则表达式做到这一点?
用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