2009-11-12 2 views
1

웹 페이지에서 일부 html을 가져 오는 작업을 수행해야합니다. 웹 페이지에는 댓글이 있으며 코멘트 내에서 HTML을 가져와야합니다. 아래 예제가 도움이되기를 바랍니다. 나는 그것을 C#에서 할 필요가있다.댓글없이 html을 얻는 정규식

<!--get html from here--> 
<div><p>some text in a tag</p></div> 
<!--get html from here--> 

나는 그것이 내가 이런 짓을 했을까 방법

<div><p>some text in a tag</p></div> 

돌아가려면?

+3

참조 : http://stackoverflow.com/questions/56107/what-is-the-best-way-to-parse-html-in-c –

답변

2

두 번째 구분 기호의 색인 인 첫 번째 구분 기호의 색인을 찾고이 문자열을 중간에 자르는 것은 어떨까요? 소리가 더 간단하고 효과적 일 수 있습니다.

2

정규 표현식은 HTML에 적합하지 않습니다. HTML을 완전히 처리하려면이 질문에서 설명한대로 HtmlAgilityPack을 고려하십시오. Looking for C# HTML parser

가장 간단한 것은 수는 아마도 일은 즉 :

string pageBuffer=...; 
string wrapping="<!--get html from here-->"; 
int firstHitIndex=pageBuffer.IndexOf(wrapping) + wrapping.Length; 
return pageBuffer.Substring(firstHitIndex, pageBuffer.IndexOf(wrapping, firstHitIndex) - firstHitIndex)); 

당신의 상황에 따라

을 (오류가 모두 마커가 있는지 확인 포함), WatiN이 유용 할 수 있습니다 (당신이있어하지 않을 경우 서버에 있지만 클라이언트 측에서 전체 HTML 구문 분석의 이점을 누릴 수있는 흥미로운 작업을 수행하는 경우).

2

모든 인스턴스가 비슷하게 형식화 된 경우

과 같은 표현식
<!--[^(-->)]*-->(.*)<!--[^(-->)]*--> 

은 두 주석 사이의 모든 것을 검색합니다. 귀하의 의견에 "HTML을 얻을 여기에서"텍스트가 잘 정의되어있는 경우, 당신은 더 많은 특정 될 수있다 : 당신이 문자열을 통해 정규식을 실행하면

<!--get html from here-->(.*)<!--get html from here--> 

가의 그룹 컬렉션 의견 사이의 HTML을 포함됩니다.

+0

그건 잘못입니다. '[^ (->)]는'() -> '중 하나를 제외한 모든 ** 하나의 문자와 일치하는 문자 클래스입니다. '(? : (?! ->).) *'- 다음 세 문자가'->'가 아닌 한, 0 개 이상의 문자가 사용됩니다. 그것은 매우 흔한 실수입니다. –

+0

당신은 또한 lazy quantifier *를 사용해야 할 것입니다. *는 탐욕스럽고 문서의 마지막 부분에 도달 할 때까지 많은 의견을 즐겁게 먹을 것입니다. –

+0

좋은 지적입니다. –

0

HTML 주석을 제거하는 것과 같은 요구 사항이 발생했습니다. 나는 정규식 기반의 솔루션을 찾고 있었기 때문에 무료 스타일의 주석 달기와 그 아래에있는 모든 유형의 문자를 가지고 작업 할 수있었습니다.

나는 그것을 시도하고 완벽하게 단일 행, 멀티 라인, 유니 코드 문자 및 기호 주석으로 작동합니다.

<!--[\u0000-\u2C7F]*?-->