Comment puis-je supprimer toutes les balises HTML, y compris & nbsp, à l'aide de regex en C #. Ma chaîne ressemble à
"<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>"
Réponses:
Si vous ne pouvez pas utiliser une solution orientée analyseur HTML pour filtrer les balises, voici une simple expression régulière pour cela.
string noHTML = Regex.Replace(inputHTML, @"<[^>]+>| ", "").Trim();
Vous devriez idéalement faire un autre passage à travers un filtre regex qui prend en charge plusieurs espaces comme
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
la source
<[^>]+?>
selon @David S.) pourrait rendre cela un peu plus rapide, mais vient d'utiliser cette solution dans un projet en direct - très heureux +1 :)Regex.Replace(inputHTML, @"<[^>]+>| ", " ")
Sound<b>Cloud</b>
comme entrée; vous vous retrouverezSound Cloud
alors qu'il aurait dû être suppriméSoundCloud
car c'est ainsi qu'il s'affiche en HTML.J'ai pris le code de @Ravi Thapliyal et créé une méthode: c'est simple et peut-être pas tout nettoyer, mais jusqu'à présent, il fait ce dont j'ai besoin.
public static string ScrubHtml(string value) { var step1 = Regex.Replace(value, @"<[^>]+>| ", "").Trim(); var step2 = Regex.Replace(step1, @"\s{2,}", " "); return step2; }
la source
J'utilise cette fonction depuis un moment. Supprime à peu près tout html désordonné que vous pouvez lui lancer et laisse le texte intact.
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(); }
la source
var noHtml = Regex.Replace(inputHTML, @"<[^>]*(>|$)| |‌|»|«", string.Empty).Trim();
la source
J'ai utilisé le code de @RaviThapliyal & @Don Rolling mais j'ai fait une petite modification. Puisque nous remplaçons le & nbsp par une chaîne vide mais que & nbsp devrait être remplacé par un espace, nous avons donc ajouté une étape supplémentaire. Cela a fonctionné pour moi comme un charme.
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; }
Utilisé & nbps sans point-virgule car il était formaté par le débordement de pile.
la source
ce:
correspondra à n'importe quelle balise ou
string regex = @"(<.+?>| )"; var x = Regex.Replace(originalString, regex, "").Trim();
alors x =
hello
la source
La désinfection d'un document Html implique beaucoup de choses délicates. Ce paquet peut être utile: https://github.com/mganss/HtmlSanitizer
la source
Le HTML est dans sa forme de base juste du XML. Vous pouvez analyser votre texte dans un objet XmlDocument et, sur l'élément racine, appeler InnerText pour extraire le texte. Cela supprimera tous les tages HTML sous n'importe quelle forme et traitera également les caractères spéciaux comme & lt; & nbsp; tout en une seule fois.
la source
Vous pouvez le tester ici: https://regex101.com/r/kB0rQ4/1
la source