Espressione regolare per rimuovere i tag HTML

Sto usando la seguente espressione regolare per rimuovere i tag html da una stringa. Funziona tranne che lascio il tag di chiusura. Se tento di rimuovere: https://stackoverflow.com/questions/3790681/regular-expression-to-remove-html-tags/blah lascia .

Non conosco la syntax dell’Espressione regolare e non posso fare a meno di farlo. Qualcuno con conoscenza di RegEx può fornirmi un modello che funzioni.

Ecco il mio codice:

  string sPattern = @"]*>"; Regex rgx = new Regex(sPattern); Match m = rgx.Match(sSummary); string sResult = ""; if (m.Success) sResult = rgx.Replace(sSummary, "", 1); 

Sto cercando di rimuovere la prima occorrenza dei tag e .

L’uso di un’espressione regolare per analizzare HTML è pieno di insidie. L’HTML non è un linguaggio normale e quindi non può essere analizzato correttamente al 100% con un’espressione regolare. Questo è solo uno dei tanti problemi che incontrerai. L’approccio migliore è usare un parser HTML / XML per farlo per te.

Ecco un link a un post sul blog che ho scritto da un po ‘di tempo e che fornisce maggiori dettagli su questo problema.

Detto questo, ecco una soluzione che dovrebbe risolvere questo particolare problema. In ogni caso non è una soluzione perfetta.

 var pattern = @"< (img|a)[^>]*>(?[^< ]*)<"; var regex = new Regex(pattern); var m = regex.Match(sSummary); if ( m.Success ) { sResult = m.Groups["content"].Value; 

Per accendere questo:

 'mammapapa' 

in questo:

 'mamma papa' 

Devi sostituire i tag con gli spazi:

 .replace(/< [^>]*>/g, ' ') 

e riduci eventuali spazi duplicati in spazi singoli:

 .replace(/\s{2,}/g, ' ') 

quindi ritaglia gli spazi iniziali e finali con:

 .trim(); 

Significa che la tua funzione di tag di rimozione assomiglia a questo:

 function removeTags(string){ return string.replace(/< [^>]*>/g, ' ') .replace(/\s{2,}/g, ' ') .trim(); } 

Quindi il parser HTML di cui tutti parlano è Html Agility Pack .

Se è pulito XHTML, puoi utilizzare anche System.Xml.Linq.XDocument o System.Xml.XmlDocument .

Per rimuovere anche gli spazi tra i tag, puoi utilizzare il seguente metodo una combinazione tra regex e un trim per gli spazi all’inizio e alla fine dell’html di input:

  public static string StripHtml(string inputHTML) { const string HTML_MARKUP_REGEX_PATTERN = @"< [^>]+>\s+(?=< )|<[^>]+>"; inputHTML = WebUtility.HtmlDecode(inputHTML).Trim(); string noHTML = Regex.Replace(inputHTML, HTML_MARKUP_REGEX_PATTERN, string.Empty); return noHTML; } 

Quindi per il seguente input:

  

test text

test 1

test 2

test 3

L’output sarà solo il testo senza spazi tra tag html o spazio prima o dopo html: “test test test 1 test 2 test 3”.

Si noti che gli spazi prima del test text provengono dal test text html e lo spazio dopo il test 3 proviene da test 3

html.

Puoi utilizzare le librerie già esistenti per rimuovere i tag html. Uno dei migliori è Chilkat C # Library .

poter usare:

 Regex.Replace(source, "< [^>]*>", string.Empty); 

Ecco il metodo di estensione che utilizzo da un po ‘di tempo.

 public static class StringExtensions { public static string StripHTML(this string htmlString, string htmlPlaceHolder) { const string pattern = @"< (.|\n)*?>"; string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder); sOut = sOut.Replace(" ", String.Empty); sOut = sOut.Replace("&", "&"); sOut = sOut.Replace(">", ">"); sOut = sOut.Replace("<", "< "); return sOut; } } 

Rimuovi l’immagine dalla stringa, utilizzando un’espressione regolare in c # (ricerca di immagini eseguita dall’ID immagine)

 string PRQ=\"logo\"/ var regex = new Regex("( match.Groups[1].Value + ""); 

Perché non provare un quantificatore riluttante? htmlString.replaceAll("< \\S*?>", "")

(È Java ma la cosa principale è mostrare l’idea)

Rimuovi gli elementi HTML

 /< \/?[\w\s]*>|< .+[\W]>/g 

Questo eliminerà tutto l’elemant HTML e lascerà il testo dietro. Funziona bene anche per elementi HTML malformati (ovvero elementi che mancano i tag di chiusura)

Riferimento ed esempio (Ex.10)

Ecco un metodo di estensione che ho creato utilizzando un’espressione regolare semplice per rimuovere i tag HTML da una stringa:

 ///  /// Converts an Html string to plain text, and replaces all br tags with line breaks. ///  ///  ///  [Extension()] public string ToPlainText(string s) { s = s.Replace("
", Constants.vbCrLf); s = s.Replace("
", Constants.vbCrLf); s = s.Replace("
", Constants.vbCrLf); s = Regex.Replace(s, "< [^>]*>", string.Empty); return s; }

Spero possa aiutare.