0

HTMLからzipファイルへのリンクを解析する必要があります。このzipファイルの名前は毎月変更されます。これが私が解析する必要のあるHTMLのスニペットです:

<a href="http://nppes.viva-it.com/NPPES_Data_Dissemination_Mar_2012.zip">

取得する必要のある文字列は「http://nppes.viva-it.com/NPPES_Data_Dissemination_Mar_2012.zip」なので、WebClientを使用してファイルをダウンロードできます。そのzipファイルのURLのうち、月ごとに一定であるのは「http://nppes.viva-it.com/」だけです。正規表現を使用して、HTMLから完全なURL「http://nppes.viva-it.com/NPPES_Data_Dissemination_Mar_2012.zip」を解析する方法はありますか?

4

3 に答える 3

1

HtmlAgilityPackを使用することにより:

var html = "<a href=\"http://nppes.viva-it.com/NPPES_Data_Dissemination_Mar_2012.zip\">";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var anchor = doc.DocumentNode.SelectSingleNode("//a");
var href = anchor.GetAttributeValue("href", null);

これで、href変数は"http://nppes.viva-it.com/NPPES_Data_Dissemination_Mar_2012.zip"値を保持します。

正規表現よりも単純ではありませんか?

于 2012-04-13T09:33:42.227 に答える
0

ページにリンクされているZIPが1つしかない場合でも、問題ありません。

Regex re = new Regex(@"http://nppes\.viva-it\.com/.+\.zip");

re.Match(html).Value // To get the matched URL

これがデモです。

于 2012-04-12T23:54:48.193 に答える
0

これが生の正規表現です-ブランチリセットを使用します。
答えはキャプチャバッファ2にあります。

<a 
  (?=\s) 
  (?= (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
    href \s*=
    (?|
        (?> \s* (['"]) \s* (http://nppes\.viva-it\.com/ (?:(?!\g{-2}) .)+ \.zip ) \s*     \g{-2} )
      | (?> (?!\s*['"]) \s* () (http://nppes\.viva-it\.com/ [^\s>]* \.zip ) (?=\s|>) )
    )
  )
  \s+ (?:".*?"|'.*?'|[^>]*?)+ 
>

C#がブランチリセットを実行できるかどうかわからない。それができない場合は、このバリエーションが機能します。
答えは常に、キャプチャバッファ3でキャットされたキャプチャバッファ2の結果です。

<a 
  (?=\s) 
  (?= (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
    href \s*=
    (?:
        (?> \s* (['"]) \s* (http://nppes\.viva-it\.com/ (?:(?!\g{-2}) .)+ \.zip ) \s* \g{-2} )
      | (?> (?!\s*['"]) \s* (http://nppes\.viva-it\.com/ [^\s>]* \.zip ) (?=\s|>) )
    )
  )
  \s+ (?:".*?"|'.*?'|[^>]*?)+ 
>
于 2012-04-13T00:46:46.423 に答える