私はそう、正規表現でこれを行うだろう。だから、あなたはテーブルセルの先頭にあるimgタグを囲むアンカータグの中の値を探したいでしょうか?
ここではC#のコードがdocument
を検索する文書全体を含む文字列である場合には、それを使用し、そのようなリンクと一致しますRegexオブジェクトを作成することです:
Regex linkscraper = new Regex(@"<\s*td[^>]*>\s*<\s*a[^>]*href\s*=\s*""(?<link>[^""]*)""[^>]>\s*<\s*img[^>]*>\s*<\s*\/a\s*>");
MatchCollection links = linkscraper.matches(document);
マッチングリンクがでMatchオブジェクトでありますLinksコレクション。グループ名は「link」です。
@はこれを生の文字列に変換します。すべて\は処理されるのではなく直接渡されるため、正規表現\動作を許可するように二重にする必要はありません。引用符は\でエスケープすることはできませんので、 『」生の文字列では、彼らがでエスケープしている』
これはかなり複雑な正規表現でそれを破壊:。。
- それが束に飛び散っています
\s*
要素を大まかに「任意の空白またはなし」と指定すると、HTMLで許可されているスペーシングのバリエーションを無視します。
[^>]
文字クラスは ">"以外のものと一致し、 *)は、 "私たちが気にしないタグの中の他のもの"を表しています。除外は、正規表現が線引きされてタグ外に出るのを防ぐことです。正規表現は貪欲であるため、文書内の最初のタグの最初の部分は、これを行わなければ、最後のタグの終わりまで明るく一致します。
- すべてのそれらの部分を説明して、それを理解することは比較的簡単です:
- (またはスペース、または属性があってもなくてもよい)TDタグ、すぐに(任意の空白を許可する「すぐ」の定義のための)に続いて
- Aタグ.hrefは「link」という名前のキャプチャグループに取り込まれます。
[^"]
のエスケープ形式である[^""]
は、すべての非クォート文字に一致します。残りのタグは気にしません。
- imgタグ。必要なものを含めることができます。
- /a終了タグ。
あなたがからのリンクを抽出しようとしている文書の正確なフォーマットについての詳細を知っている場合は、この正規表現を引き締めることができます。具体的には、[^>]*
グループは、タグに任意の値を含めることを許可するために使用される> "ブロックではないゼロ個以上の文字と一致します。"は、おそらく実際の文書により限定された部分式に置き換えてください。これは、フォーム<TD><A href=...><IMG></a>
のいずれかをキャッチします。これは、必要以上に一致する場合もあります。
Regexを使ってXMLを解析しないでください:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
私は、 C#は有効なXMLのためのステッカーであり、誤った入力があった場合には例外をスローすることを覚えておいてください。取得したXMLが有効であることが分かっている場合は、XMLパーサーを使用します。しかし、XMLのように見える任意のドキュメントを取得していてもそうでないドキュメントを取得している場合は、正規表現などの他のツールが必要になります。いいえ、正規表現ではXMLを実際には "解析"できませんが、クリアパターンに一致する1つのタグから単一のフィールドを抽出しようとしています。 –