從中提取文本

...

標記或直接來自HTML文件

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

我有一個HTML頁面,其中包含一些我想從網絡服務器下載的文件名。我需要讀取這些文件名才能創建一個列表,該列表將傳遞給我從服務器下載文件的Web應用程序。這些文件名有一些擴展名。

我已經挖掘了這個話題,但除了 - 之外沒有任何東西。

  1. 正則表達式不能用於解析HTML。
  2. 使用HTML Agility Pack

沒有其他方法可以搜索HTML文件中帶有類似filename.ext的模式的文本嗎?

包含文件名的示例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




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因