Wie entferne ich alle HTML-Tags aus einer Zeichenfolge, ohne zu wissen, welche Tags darin enthalten sind?


120

Gibt es eine einfache Möglichkeit, alle HTML-Tags oder ALLES, was mit HTML zu tun hat, aus einer Zeichenfolge zu entfernen?

Beispielsweise:

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

Das obige sollte wirklich sein:

"Hulk Hogans Promi-Wrestling [Proj # 206010] (Reality-Serie)"


Diese Frage wird aufgrund von Duplikaten geschlossen, die vorgeschlagene Antwort wird jedoch mit dem HTML Agility Pack gegeben. Wenn Sie HTML-Tags ohne Verwendung des HTML Agility Packs entfernen möchten, können Sie meine Antwort hier auf stackoverflow.com/a/30026043/2318354 verweisen . Was für
jemanden

6
Dies ist kein Duplikat, da "HTML Agility Pack - unerwünschte Tags entfernen, ohne Inhalte zu entfernen?" möchte einige Tags behalten (dh eine Liste gültiger Tags angeben, den Rest entfernen). Bei dieser Frage geht es darum, ALLE Tags zu entfernen. Und ich kann die Antworten der anderen Frage nicht verwenden, da ich keine Liste aller vorhandenen HTML-Tags weitergeben werde.
Thierry_S

Schauen Sie sich xidel an . Sie brauchen 95% des Weges dorthin xidel -s input -e '/'.
Josh Habdas

Antworten:


243

Sie können einen einfachen regulären Ausdruck wie diesen verwenden:

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

Beachten Sie, dass diese Lösung einen eigenen Fehler aufweist. Weitere Informationen finden Sie unter Entfernen von HTML-Tags in String (insbesondere die Kommentare von @mehaase).

Eine andere Lösung wäre die Verwendung des HTML Agility Pack .
Ein Beispiel für die Verwendung der Bibliothek finden Sie hier: HTML Agility Pack - Entfernen unerwünschter Tags ohne Entfernen von Inhalten?


2
Funktioniert nicht für die Eingabe: '7 <10 <b> aber </ b> 30> 10' ergibt: '7 aber 30> 10'
Bartosz Pierzchlewicz

Ja, weil es alles zwischen <und> entfernt, also in Ihrem Fall, < 10 <b>und </b>beide entfernt werden.
Bidou

2
Sollte der Methodenname nicht StripHtml () sein, da Methodennamen die Groß- und Kleinschreibung Pascal verwenden sollten?
David Klempfner

Die Verwendung regulärer Ausdrücke ist wahrscheinlich keine gute Idee, wenn Sie sie aus Sicherheitsgründen verwenden.
Mathias Lykkegaard Lorenzen

3
Ändern Sie einfach die Regex in <[a-zA-Z /] *?>
Brandon Prudent

54

Sie können die Zeichenfolge mit dem HTML Agility Pack analysieren und den InnerText abrufen.

    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;

Ich mag die InnerTextLösung, da sie alle Tags entfernt. Aber ... es hinterlässt &nbsp;und auch Kommentar - Tags wie <!-- xxx --> wie die umliegenden v:shapetype, v:shapeoder v:imagedatamit [if gte vml 1]oder[if !vml]
Thierry_S

7
Mir ist klar, dass dies &nbsp;eine HTML-Entität ist, kein Tag, also eine Lösung zum Entfernen result = WebUtility.HtmlDecode(result);und Entfernen der Kommentarknoten mithilfe des HTML-Agility-Pakets: htmlDoc.DocumentNode.SelectNodes("//comment()")?.ForEach(c=> c.Remove());kurz bevorresult = htmlDoc.DocumentNode.InnerText;
Thierry_S

3

Sie können den folgenden Code für Ihre Zeichenfolge verwenden und erhalten die vollständige Zeichenfolge ohne HTML-Teil.

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.