Я анализирую несколько документов HTML и каждый из них должен попытаться извлечь почтовый адрес в Великобритании. Для того, чтобы сделать это я разбор HTML с AngleSharp, а затем ищу узлы с TextContent, которые соответствуют моему RegEx:Найти узел HTML/XML с помощью RegEx
var parser = new HtmlParser();
var source = "<html><head><title>Test Title</title></head><body><h1>Some example source</h1><p>This is a paragraph element and example postode EC1A 4NP</body></html>";
var document = parser.Parse(source);
Regex searchTerm = new Regex("([A-PR-UWYZ][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)");
var list = document.All.Where(m => searchTerm.IsMatch((m.TextContent ?? "").ToUpper()));
Это возвращает 3 результатов, html
, body
и p
элементов. Единственный элемент, который я хочу вернуть, - это элемент p, поскольку он правильно соответствует правилу innerText. Также может быть несколько совпадений на странице, поэтому я не могу просто вернуть последний результат. Я хочу просто вернуть любые элементы, в которых текст в этом элементе (а не в любых дочерних узлах) соответствует регулярному выражению.
Редактировать
я не знаю заранее структуру DOC или даже тег, почтовый индекс будет в который почему я использую регулярное выражение. Как только у меня есть результат, я планирую пройти через dom, чтобы получить остальную часть адреса, поэтому я не просто хочу обрабатывать документ как строку
Знаете ли вы заранее, что это будет «P», или вам нужен какой-либо узел с текстовым контентом, который содержит вашу информацию (только для образца «P» страница https://github.com/AngleSharp/AngleSharp/wiki/Examples предоставляет достаточно информации). –
Я не знаю, какой тег адрес будет содержать внутри - это могут быть P, DIV, DD и т. Д. – Macros