У вас есть два способа получить весь текст внутри тега <h1>
до <h6>
Таким образом, ваш входной html:
string input = @"<div class='main - body'>
<h2> 1.1 Heading </h2>
<h3> 1.1.1 Subheading </h3>
<p> Lorem ipsum </ p >
<h3> 1.1.2 Another Subheading</h3>
<p> Lorem ipsum </p>
<h2> 2.1 Heading </h2>
<h3> 2.1.1 Subheading </h3>
<p> Lorem ipsum </p>
<h4> 2.1.1.1 SubSubHeading </h4>
</div> ";
1) Поиспользуя регулярное выражение:
Используйте это регулярное выражение, чтобы получить весь текст внутри тега заголовка от <h1>
до <h6>
<h[1-6][^>]*?>(?<TagText>.*?)</h[1-6]>
Использование:
string pattern = @"<h[1-6][^>]*?>(?<TagText>.*?)</h[1-6]>";
MatchCollection matches = Regex.Matches(input, pattern);
var heading_matches = matches.Cast<Match>().Select(x => x.Groups["TagText"].Value);
Чтобы пренебречь h1
, используйте
string pattern = @"<h[2-6][^>]*?>(?<TagText>.*?)</h[2-6]>";
2) Используя HtmlAgilityPack:
Используйте пакет HtmlAgilityPack для получения всего текставнутри <h1>
до <h6>
.
Вам необходимо установить этот пакет из консоли диспетчера пакетов NuGet.
Install-Package HtmlAgilityPack -Version 1.8.14
Использование:
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(input);
string xpathQuery = "//*[starts-with(name(),'h') and string-length(name()) = 2 and number(substring(name(), 2)) <= 6]";
var texts = htmlDocument.
DocumentNode
.SelectNodes(xpathQuery)
.Select(x => x.InnerText)
.ToList();
Чтобы пренебречь h1
, затем используйте
string xpathQuery = "//*[starts-with(name(),'h') and string-length(name()) = 2 and number(substring(name(), 2)) > 1 and number(substring(name(), 2)) <= 6]";
Выход: (из отладчика)