からテキストを抽出する

...

タグ、またはHTMLファイルから直接

asp.net c# html html-agility-pack regex

質問

私はWebサーバーからダウンロードしたいいくつかのファイル名を含むHTMLページを持っています。サーバーからファイルをダウンロードするWebアプリケーションに渡されるリストを作成するには、これらのファイル名を読み取る必要があります。これらのファイル名にはいくつかの拡張があります。

私はこの話題については掘り下げましたが、

  1. 正規表現を使用してHTMLを解析することはできません。
  2. HTMLアジリティパックを使用する

HTMLファイルからfilename.extのようなパターンを持つテキストを検索できるように他の方法はありませんか?

filenameを含むサンプルHTML -

 <p class=3DMsoNormal style=3D'margin-top:0in;margin-right:0in;margin-bottom=:0in; margin-left:1.5in;margin-bottom:.0001pt;text-indent:-.25in;line-height:normal;mso-list:l1 level3 lfo8;tab-stops:list 1.5in'><![if !supportLists]> <span style=3D'font-family:"Times New Roman","serif";mso-fareast-font-family:"Times New Roman"'><span style=3D'mso-list:Ignore'>1.<span style=3D'font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span></span></span><![endif]><span style=3D'font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"'>**13572_PostAccountingReport_2009-06-03.acc**<o:p></o:p></span></p>

どのアプリケーションやツールをダウンロードして使用することは許可されていないため、 HTML Agility Packを使用することはできません。

これは他の論理によって達成されると言いますか?

これは私がこれまでにやったことです

string pageSource = "";
            string geturl = @"C:\Documents and Settings\NASD_Download.mht";
            WebRequest getRequest = WebRequest.Create(geturl);
            WebResponse getResponse = getRequest.GetResponse();
            using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
            {
                pageSource = sr.ReadToEnd();
                pageSource.Replace("=", "");
            }
           var fileNames = from Match m in Regex.Matches(pageSource, @"[0-9]+_+[A-Za-z]+_+[0-9]+-+[0-9]+-+[0-9]+.+[a-z]")
                          select m.Value;
            foreach (var s in fileNames)
                Response.Write(s);

いくつかの "="のすべてのファイル名には、ファイル名を取得できませんでした。 pageSource stringで "="の出現を取り除くにはどうすればよいですか?

前もって感謝します

Akhil

受け入れられた回答

まあ、 regexがHTMLで値を見つけるのに理想的ではないことを知っている:

var files = [];
var p = document.getElementsByTagName('p');

for (var i = 0; i < p.length; i++){
    var match = p[i].innerHTML.match(/\s(\S+\.ext)\s/)

    if (match)
        files.push(match[1]);
}

ライブデモ

注:コメントを質問に読んでください。

拡張子が何でもかまいませんが、これを使うことができます:

var files = [];
var p = document.getElementsByTagName('p');

for (var i = 0; i < p.length; i++){
    var match = p[i].innerHTML.match(/\b(\S+\.\S+)\b/)
    console.log(match)
    if (match)
        files.push(match[1]);
}
document.getElementById('result').innerHTML = files + "";

â€<しかし、これは本当に本当に信頼性がありません。

ライブデモ


人気のある回答

一般的なパターンを使用してファイル名を取得することは不可能な場合があります。これは、 1.5in -.25in 7.0pt -.25in 7.0ptなどのためであり、可能であればもっと具体的にしようとします。
/[a-z0-9_-]+\.[az]+/giまたは
/>[a-z0-9_-]+\.[az]+</gi (マークアップを含む)または
/>\d+_PostAccountingReport_\d+-\d+-\d+\.[az]+</gi



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ