¿Cómo puedo eliminar todas las etiquetas HTML, incluidas & nbsp, usando expresiones regulares en C #? Mi cuerda parece
"<div>hello</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div>"
Respuestas:
Si no puede utilizar una solución orientada al analizador HTML para filtrar las etiquetas, aquí tiene una expresión regular simple.
string noHTML = Regex.Replace(inputHTML, @"<[^>]+>| ", "").Trim();
Idealmente, debería hacer otra pasada a través de un filtro de expresiones regulares que se encarga de varios espacios como
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
fuente
<[^>]+?>
según @David S.) podría hacer esto un poco más rápido, pero solo usé esta solución en un proyecto en vivo, muy feliz +1 :)Regex.Replace(inputHTML, @"<[^>]+>| ", " ")
Sound<b>Cloud</b>
como entrada; terminará conSound Cloud
lo que debería haber sido eliminadoSoundCloud
porque así es como se muestra en HTML.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) { var step1 = Regex.Replace(value, @"<[^>]+>| ", "").Trim(); var step2 = Regex.Replace(step1, @"\s{2,}", " "); return step2; }
fuente
He estado usando esta función por un tiempo. Elimina prácticamente cualquier html desordenado que puedas lanzar 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, "<script", "</script>"); html = RemoveTag(html, "<style", "</style>"); //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(); }
fuente
var noHtml = Regex.Replace(inputHTML, @"<[^>]*(>|$)| |‌|»|«", string.Empty).Trim();
fuente
He usado el código de @RaviThapliyal y @Don Rolling, pero hice una pequeña modificación. Ya que estamos reemplazando & nbsp con una cadena vacía, pero en su lugar & nbsp debería reemplazarse con un espacio, agregamos un paso adicional. Me funcionó a las mil maravillas.
public static string FormatString(string value) { var step1 = Regex.Replace(value, @"<[^>]+>", "").Trim(); var step2 = Regex.Replace(step1, @" ", " "); var step3 = Regex.Replace(step2, @"\s{2,}", " "); return step3; }
Se usó & nbps sin punto y coma porque el Stack Overflow lo estaba formateando.
fuente
esta:
coincidirá con cualquier etiqueta o
string regex = @"(<.+?>| )"; var x = Regex.Replace(originalString, regex, "").Trim();
entonces x =
hello
fuente
La desinfección de un documento Html implica muchas cosas complicadas. Este paquete puede ser de ayuda: https://github.com/mganss/HtmlSanitizer
fuente
HTML está en su forma básica solo XML. Puede analizar su texto en un objeto XmlDocument y, en el elemento raíz, llamar a InnerText para extraer el texto. Esto eliminará todas las etiquetas HTML en cualquier forma y también tratará con caracteres especiales como & lt; & nbsp; todo de una vez.
fuente
Puede probarlo aquí: https://regex101.com/r/kB0rQ4/1
fuente