Saltar al contenido

Eliminar etiquetas HTML de string incluso en C#

Posteriormente a mirar en varios repositorios y páginas webs al terminar hemos descubierto la respuesta que te compartiremos ahora.

Solución:

Si no puede usar una solución orientada al analizador HTML para filtrar las etiquetas, aquí hay una expresión regular simple para ello.

string noHTML = Regex.Replace(inputHTML, @"<[^>]+>| ", "").Trim();

Idealmente, debería hacer otra pasada a través de un filtro de expresiones regulares que se encargue de múltiples espacios como

string noHTMLNormalised = Regex.Replace(noHTML, @"s2,", " ");

Tomé el código de @Ravi Thapliyal e hice un método: es simple y puede que no limpie todo, pero hasta ahora está haciendo lo que necesito que haga.

public static string ScrubHtml(string value)  ", "").Trim();
    var step2 = Regex.Replace(step1, @"s2,", " ");
    return step2;

He estado usando esta función por un tiempo. Elimina prácticamente cualquier html desordenado que pueda arrojarle y deja el texto intacto.

        private static readonly Regex _tags_ = new Regex(@"<[^>]+?>", RegexOptions.Multiline | RegexOptions.Compiled);

        //add characters that are should not be removed to this regex
        private static readonly Regex _notOkCharacter_ = new Regex(@"[^w;&#@.:/\?=|%!() -]", RegexOptions.Compiled);

        public static String UnHtml(String html)
        
            html = HttpUtility.UrlDecode(html);
            html = HttpUtility.HtmlDecode(html);

            html = RemoveTag(html, "");
            html = RemoveTag(html, "");
            html = RemoveTag(html, "");

            //replace matches of these regexes with space
            html = _tags_.Replace(html, " ");
            html = _notOkCharacter_.Replace(html, " ");
            html = SingleSpacedTrim(html);

            return html;
        

        private static String RemoveTag(String html, String startTag, String endTag)
        
            Boolean bAgain;
            do
            
                bAgain = false;
                Int32 startTagPos = html.IndexOf(startTag, 0, StringComparison.CurrentCultureIgnoreCase);
                if (startTagPos < 0)
                    continue;
                Int32 endTagPos = html.IndexOf(endTag, startTagPos + 1, StringComparison.CurrentCultureIgnoreCase);
                if (endTagPos <= startTagPos)
                    continue;
                html = html.Remove(startTagPos, endTagPos - startTagPos + endTag.Length);
                bAgain = true;
             while (bAgain);
            return html;
        

        private static String SingleSpacedTrim(String inString)
        
            StringBuilder sb = new StringBuilder();
            Boolean inBlanks = false;
            foreach (Char c in inString)
            
                switch (c)
                
                    case 'r':
                    case 'n':
                    case 't':
                    case ' ':
                        if (!inBlanks)
                        
                            inBlanks = true;
                            sb.Append(' ');
                           
                        continue;
                    default:
                        inBlanks = false;
                        sb.Append(c);
                        break;
                
            
            return sb.ToString().Trim();
        

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *