2013-08-09 12 views
60

Czy istnieje łatwy sposób na usunięcie wszystkich tagów HTML lub JAKIEKOLWIEK HTML-a związanego z łańcuchem?Jak usunąć wszystkie tagi HTML z ciągu znaków, nie wiedząc, które tagi w nim są?

Na przykład:

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)" 

Powyższy naprawdę powinny być:

"Hulk Hogan Celebrity Championship Wrestling [Proj # 206010] (Reality Series)"

+0

To pytanie jest zamknięte z powodu powielania, ale sugerowana odpowiedź jest podana przy użyciu pakietu Agility Pack Html. Jeśli chcesz usunąć tagi HTML bez użycia pakietu Agility Html, możesz polecić moją odpowiedź tutaj http://stackoverflow.com/a/30026043/2318354. Które mogą być pomocne dla niektórych – Dilip0165

+0

To nie jest duplikat, jak "pakiet agility HTML - usuwanie niechcianych tagów bez usuwania treści?" chce zachować kilka tagów (np. podać listę ważnych tagów, usunąć resztę). To pytanie dotyczy usuwania WSZYSTKICH tagów. I nie mogę używać odpowiedzi innych pytań, ponieważ nie mam zamiaru przekazać listy wszystkich istniejących znaczników html. –

Odpowiedz

132

Można użyć prostego wyrażenia regularnego tak:

public static string StripHTML(string input) 
{ 
    return Regex.Replace(input, "<.*?>", String.Empty); 
} 

Bądź świadomy t to rozwiązanie ma swoją wadę. Aby uzyskać więcej informacji (w szczególności komentarze @mehaase), zobacz Remove HTML tags in String.

Innym rozwiązaniem byłoby użycie HTML Agility Pack.
można znaleźć przykład przy użyciu biblioteki tutaj: HTML agility pack - removing unwanted tags without removing content?

+0

nie działa dla wejścia: '7 < 10 ale 30> 10' \t daje: '7, ale 30> 10' –

+0

Tak, ponieważ pozbawia wszystko pomiędzy < and >, więc w Twoim przypadku, '< 10 ' i '' są obnażeni. – Bidou

26

można analizować ciąg przy użyciu Html Agility pack i uzyskać innerText.

HtmlDocument htmlDoc = new HtmlDocument(); 
    htmlDoc.LoadHtml(@"<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)"); 
    string result = htmlDoc.DocumentNode.InnerText; 
+0

Podoba mi się rozwiązanie 'InnerText', ponieważ usuwa wszystkie znaczniki. Ale ... pozostawia po sobie ' ' i również znaczniki komentarza, takie jak '' podobne do otaczających 'v: shapetype',' v: shape' lub 'v: imagedata' z' [if gte vml 1] 'lub' [if! vml] ' –

+3

Zdaję sobie sprawę, że'   'jest encją html, a nie tagiem, więc rozwiązaniem problemu może być' result = WebUtility.HtmlDecode (result); 'i usunięcie węzłów komentarzy, używając Html Agility Pack: 'htmlDoc.DocumentNode.SelectNodes (" // komentarz() "). ForEach (c => c.Remove());' tuż przed wykonaniem 'result = htmlDoc.DocumentNode.InnerText;' –

2

Możesz użyć poniższego kodu na łańcuchu, a otrzymasz kompletny ciąg bez części html.

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)".Replace("&nbsp;",string.Empty);    
     string s = Regex.Replace(title, "<.*?>", String.Empty); 
Powiązane problemy