Regex C# как ограничить захват?
Есть задача выбирать значения только корректных тегов. Я приведу пример
List<string> res = new List<string>();
string input = "<p>vasya<p>lena</p><p>gena</p>";
string pattern = "<p>(.*?)</p>";
var matches = Regex.Matches(input, pattern);
foreach (Match m in matches)
{
res.Add(m.Groups[1].Value);
}
Заметьте довольно простое рег. выражение, но к сожалению оно выдает
res[0] "vasya<p>lena"
res[1] "gena"
а должно взять только lena и gena.
Хотелось бы решить не только этот конкретный пример, а научиться универсально ограничивать регулярку последним началом до (.*?) к первому концу
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Дописать регулярку так, чтобы она обрабатывала ваш случай.
Например так, исключая символ <:
string pattern = @"<p>([^<]*?)<\/p>";
res[0] "lena"
res[1] "gena"
Или лучше используйте нормальный парсер.
using HtmlAgilityPack;
// ...
List<string> res = new List<string>();
string input = "<p>vasya<p>lena</p><p>gena</p>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(input);
foreach(HtmlNode node in doc.DocumentNode.ChildNodes)
{
if (node.Name == "p") res.Add(node.InnerText);
}
Вот кстати сайт, очень подходящий для тестирвоания регулярок. Рекомендую.