에서 텍스트 추출

...

태그 또는 HTML 파일에서 직접 가져 오기

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

문제

웹 서버에서 다운로드 할 파일 이름이 들어있는 HTML 페이지가 있습니다. 서버에서 파일을 다운로드하는 웹 응용 프로그램에 전달 될 목록을 만들기 위해이 파일 이름을 읽어야합니다. 이 파일 이름에는 약간의 확장이 있습니다.

나는이 주제에 관해 파헤 쳤다. 그러나 아무것도 제외하고 아무것도 분발하지 않는다.

  1. 정규 표현식은 HTML을 구문 분석하는 데 사용할 수 없습니다.
  2. HTML 민첩성 팩 사용

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);

Bcause 일부 "="모든 파일 이름에서 파일 이름을 가져올 수 없습니다. pageSource string 에서 "="발생을 제거하려면 어떻게해야합니까?

미리 감사드립니다.

아크 힐

수락 된 답변

글쎄, 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 및 좋아, 좋아, (가능하다면) 더 구체적으로 시도
/[a-z0-9_-]+\.[az]+/gi / /[a-z0-9_-]+\.[az]+/gi or
/>[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는 합법적입니까? 예, 이유를 알아보십시오.