2010-04-09 7 views
3

'<'으로 끝나는 모든 내용을 제거하고 '>'으로 끝나는 항목을 C#의 문자열에서 제거하려면 어떻게합니까? 나는 그것이 정규식와 함께 할 수 있다는 것을 알고 있지만, 나는 그다지 좋지 않습니다.C#의 문자열에서 HTML 태그 및 주석을 제거 하시겠습니까?

+1

는 HTML 민첩성 팩과 같은 HTML 파서를 사용합니다. 정규 표현식은 종종 html로는 좋지 않은 선택입니다. –

+0

이 경우 정규 표현식을 사용하는 간단한 경우 일 수 있습니다. 다른 태그에 대해 전체 DOM을 구문 분석하는 것과 같지 않습니다. – AuthorProxy

답변

4

내가 최근에 작성한 태그 패턴은 최근의 작은 프로젝트를 위해 작성되었습니다.

string tagPattern = @"<[!--\W*?]*?[/]*?\w+.*?>"; 

나는 그것은 가능성이 올바르게 스크립트 나 스타일 태그를 처리하기 위해 수정 될 필요가있을 것이다이

MatchCollection matches = Regex.Matches(input, tagPattern); 
foreach (Match match in matches) 
{ 
    input = input.Replace(match.Value, string.Empty); 
} 

처럼 사용했다.

+0

매력처럼 작동했습니다. –

+1

'[! - \ W *?] '는 "단어가 아닌 문자 인'!'와'-' 사이의 문자와 일치합니다 ,'*'또는'?' ". 이 그룹은 선택 사항이므로 상처를주지는 않지만 부정적인 lookahead ('(?!)','\ W *?'및 그 뒤에 오는' *?'전혀 의미가 없습니다.) –

1

정규식이 아닌 옵션 : 그러나 여전히 중첩 태그를 구문 분석하지 않습니다! 빠른 정규식에 비해 8 배를 작동

public static string StripHTML(string line) 
     { 
      int finished = 0; 
      int beginStrip; 
      int endStrip; 

      finished = line.IndexOf('<'); 
      while (finished != -1) 
      { 
       beginStrip = line.IndexOf('<'); 
       endStrip = line.IndexOf('>', beginStrip + 1); 
       line = line.Remove(beginStrip, (endStrip + 1) - beginStrip); 
       finished = line.IndexOf('<'); 
      } 

      return line; 
     } 
1

또 다른 비 정규식 코드 :

public static string StripTagsCharArray(string source) 
{ 
    char[] array = new char[source.Length]; 
    int arrayIndex = 0; 
    bool inside = false; 
    for (int i = 0; i < source.Length; i++) 
    { 
     char let = source[i]; 
     if (let == '<') 
     { 
      inside = true; 
      continue; 
     } 
     if (let == '>') 
     { 
      inside = false; 
      continue; 
     } 
     if (!inside) 
     { 
      array[arrayIndex] = let; 
      arrayIndex++; 
     } 
    } 
    return new string(array, 0, arrayIndex); 
} 
관련 문제