2009-06-11 6 views
5

html 및 body 태그가 소문자이거나 존재하지 않을 수도 있다는 점을 감안하여 Regex를 사용하여 html 문서에서 본문을 추출하는 방법은 무엇입니까? ?Regex Extract HTML Body

+5

중복 된 http://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content? – M4N

답변

9

정규식을 사용하지 마십시오. Html Agility Pack과 같은 것을 사용하십시오.

이 는 DOM을 읽기/쓰기를 구축하고 일반 XPATH 또는 XSLT를 지원하는 민첩한 HTML 파서는 (당신이 실제로 XPATH도 그것을 사용하는 XSLT를 이해하지 않아도, 걱정하지 마십시오. ..). "웹에서"HTML 파일을 구문 분석 할 수있는 .NET 코드 라이브러리입니다. 구문 분석기는 "실제 세계"형식의 HTML에 매우 관대합니다. 객체 모델은 System.Xml을 제안하지만 HTML 문서 (또는 스트림)에 대해서는 매우 유사합니다.

그러면 XPATH를 사용하여 body을 추출 할 수 있습니다.

+0

동의합니다. 나는 이것을 사용했고 빠르고 깔끔하고 깨끗하다고 ​​말해야 만합니다. –

0

이 아주 가까이 당신을 얻을해야합니다

(?is)<body(?:\s[^>]*)>(.*?)(?:</\s*body\s*>|</\s*html\s*>|$) 
+0

세부적인 해결책을 제공해주십시오. – ShaileshDev

11

어떻게 이런 일에 대해?

<body></body> 태그 사이의 모든 문자 (RegexOptions.IgnoreCase로 인해 대소 문자를 구별하지 않음)를 theBody 그룹으로 캡처합니다.

RegexOptions.Singleline을 사용하면 여러 줄의 HTML을 단일 문자열로 처리 할 수 ​​있습니다.

HTML에 <body></body> 태그가없는 경우 일치 항목의 Success 속성은 false입니다.

 string html; 

     // Populate the html string here 

     RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline; 
     Regex regx = new Regex("<body>(?<theBody>.*)</body>", options); 

     Match match = regx.Match(html); 

     if (match.Success) { 
      string theBody = match.Groups["theBody"].Value; 
     } 
+0

+1 깨끗하고 깔끔한 해결책 –

+0

고마워요! 그게 내가 위해 노력하는거야. – Darryl

+0

위대한, 그게 내가 필요한 것. – Nadjib