我正在解析许多 HTML 文档,并且在每个文档中都需要尝试提取一个英国邮政地址。为此,我使用 AngleSharp 解析 HTML,然后查找与我的 RegEx 匹配的 TextContent 节点:
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 与正则表达式正确匹配。一个页面上可能还有多个匹配项,所以我不能只返回最后一个结果。我希望只返回该元素中的文本(不在任何子节点中)与正则表达式匹配的任何元素。
编辑
我事先不知道文档结构,甚至不知道邮政编码所在的标签,这就是我使用正则表达式的原因。一旦我得到结果,我计划遍历 dom 以获取地址的其余部分,所以我不只是想将 doc 视为字符串