私は多数の HTML ドキュメントを解析しており、それぞれの必要に応じて英国の住所を抽出しようとしています。そのために、AngleSharp で HTML を解析し、正規表現に一致する 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()));
html
これは、body
、p
要素の 3 つの結果を返します。私が返したい唯一の要素は p 要素です。これは、innerText が正規表現に正しく一致しているためです。ページに複数の一致がある場合もあるため、最後の結果を返すことはできません。その要素のテキスト (子ノードではない) が正規表現と一致する要素を返すだけです。
編集
ドキュメント構造や、郵便番号が含まれるタグさえも事前に知らないため、正規表現を使用しています。結果が得られたら、dom をトラバースして残りのアドレスを取得することを計画しているので、ドキュメントを文字列として扱いたくないだけです