1

Regex.Match を使用して Web サイトのソースからファイル名を取得しようとしていますが、ページのタイトルを取得するのと似たようなものがあります。

string title = Regex.Match(f, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;

f文字列が私のページにリダイレクトされています..

だから私が必要なのは:このソースからファイル名を取得することです:

<br><p><b>Download:</b> 24 hours<br><b>Time Left for Download:</b> <span id='cd'></span></p><p>Click on the file name to begin download.</p><div class='linkbox'><ul><li><a href="http://site.com/file/y8Qi2Bw8SXPX/51423">blabla.pdf</a></li></div></ul>
<a id="facebookbtn-link" title="send to Facebook" href="http://www.facebook.com/sharer.php?u=http://site.com/product/komM8k" onclick="return popup(this)" ><img src="http://site/img/facebook.png" alt="Facebook" />Post on Facebook</a>

blabla.pdf を取得する必要がある問題は、ページが常にファイル名を更新するため、毎回同じ名前になるとは限らないため、正確に必要なのは >blabla.pdf の間で名前を取得することです

4

3 に答える 3

2

SLaksの回答について詳しく説明します。HTML Agility パックと呼ばれるパッケージがあります。NuGet パッケージとして提供されます。

例はこちらhttp://htmlagilitypack.codeplex.com/wikipage?title=Examples

于 2012-10-24T20:37:17.533 に答える
0

タグ処理を行っているのではなく、特定の固定パターンを探しているので、正規表現はこの状況で使用する優れたツールだと思います。これが仕事をするパターンです。

string data = @"<br><p><b>Download:</b> 24 hours<br><b>Time Left for Download:</b>
<span id='cd'></span></p><p>Click on the file name to begin download.</p><div class='linkbox'><ul><li>
<a href=""http://site.com/file/y8Qi2Bw8SXPX/51423"">blabla.pdf</a></li></div></ul>
<a id=""facebookbtn-link"" title=""send to Facebook""
href=""http://www.facebook.com/sharer.php?u=http://site.com/product/komM8k""
onclick=""return popup(this)"" ><img src=""http://site/img/facebook.png"" alt=""Facebook"" />Post on Facebook</a>";


Console.WriteLine (Regex.Match(data, @"(?:\>)(?<PDF>[^\.]+\.pdf)(?:\<)").Groups["PDF"].Value);

// blabla.pdf is outputed

EDIT:任意のファイルの使用に一致するように(PDFから離れた名前付きのグループ化された変更に注意してください

Regex.Match(data, @"(?:\>)(?<File>[^\.]+\.[a-z]{3})(?:\</a\>)").Groups["File"].Value
于 2012-10-24T20:51:48.513 に答える
0

このパターンを試してください:

<a href="[^>]+>(.+?)</a>

キャプチャされたグループ ($1) にはファイル名が必要です

于 2012-10-24T20:46:25.353 に答える