извлекать текст из

...

тег или непосредственно из HTML-файла

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

Вопрос

У меня есть HTML-страница, содержащая некоторые имена файлов, которые я хочу загрузить с веб-сервера. Мне нужно прочитать эти имена файлов, чтобы создать список, который будет передан моему веб-приложению, загружающему файл с сервера. Эти имена файлов имеют некоторое расширение.

Я выкопал эту тему, но ничего не заводил, кроме как -

  1. Regex не может использоваться для анализа HTML.
  2. Использовать HTML Agility Pack

Разве нет другого способа, чтобы я мог искать текст с шаблоном типа filename.ext из HTML-файла?

Пример 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);

Bcause из некоторых "=", возникающих в каждом имени файла, не может получить имя файла. как я могу удалить появление «=» в 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]);
}

Live DEMO

Примечание. Прочитайте комментарии к вопросу.

Если расширение может быть любым, вы можете использовать это:

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 + "";

Но это действительно не надежно.

Live DEMO


Популярные ответы

Возможно, невозможно получить имена файлов, используя общий шаблон из-за 1.5in -.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
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow