Regex split string по закрывающему тегу "/>"
подскажите, пожалуйста можно ли применить Regex.Split по закрывающему тегу />.
К примеру, имеется строка:
<area shape="poly" coords="464, 1415, 554, 1414, 741, 1415, 786, 1426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426" /><area shape="rect" coords="154, 581, 791, 694" />
, чтобы на выходе получить массив строк на c#:
[0]:"<area shape="poly" coords="464, 1415, 554, 1414, 741, 1415, 786, 1426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426" />"
[1]:"<area shape="poly" coords="414, 1215, 154, 1414, 441, 1415, 786, 426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426" />"
Пробовал:
const string pattern = "<area.*?>";
string[] result = Regex.Split(areaCodeHtml, pattern).ToArray();
не работает
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Если это HTML, то гораздо лучше использовать специально предназначенный для этого парсер.
using HtmlAgilityPack;
public static void Main()
{
string html = @"<area shape=""poly"" coords=""464, 1415, 554, 1414, 741, 1415, 786, 1426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426"" /><area shape=""rect"" coords=""154, 581, 791, 694"" />";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//area");
foreach (HtmlNode node in nodes)
{
Console.WriteLine(node.OuterHtml);
}
}
Вывод в консоль
<area shape="poly" coords="464, 1415, 554, 1414, 741, 1415, 786, 1426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426">
<area shape="rect" coords="154, 581, 791, 694">
Можно сразу нужный аттрибут получить
foreach (HtmlNode node in nodes)
{
Console.WriteLine(node.Attributes["shape"].Value);
Console.WriteLine(node.Attributes["coords"].Value);
}
Вывод в консоль
poly
464, 1415, 554, 1414, 741, 1415, 786, 1426, 792, 1464, 706, 1481, 592, 1477, 499, 1475, 438, 1457, 448, 1426
rect
154, 581, 791, 694