Comment puis-je supprimer toutes les balises HTML, y compris & nbsp, à l’aide de regex en C #. Ma ficelle 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>"
Si vous ne pouvez pas utiliser une solution orientée analyseur HTML pour filtrer les balises, voici une regex simple.
string noHTML = Regex.Replace(inputHTML, @"<[^>]+>| ", "").Trim();
Vous devriez idéalement faire une autre passe à travers un filtre regex qui prend en charge plusieurs espaces comme
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
J'ai pris le code de @Ravi Thapliyal et créé une méthode: c'est simple et il est possible que tout ne soit pas nettoyé, mais jusqu'à présent, il fait ce que j'ai besoin de faire.
public static string ScrubHtml(string value) {
var step1 = Regex.Replace(value, @"<[^>]+>| ", "").Trim();
var step2 = Regex.Replace(step1, @"\s{2,}", " ");
return step2;
}
J'utilise cette fonction depuis un moment. Enlève à peu près tout le code HTML désordonné que vous pouvez lui jeter 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();
}
var noHtml = Regex.Replace(inputHTML, @"<[^>]*(>|$)| |‌|»|«", string.Empty).Trim();
J'ai utilisé le code de @RaviThapliyal & @Don Rolling, mais j'ai apporté une petite modification. Étant donné que nous remplaçons & nbsp par une chaîne vide mais que & nbsp devrait être remplacé par un espace, nous ajoutons 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.
HTML est dans sa forme de base simplement XML. Vous pouvez analyser votre texte dans un objet XmlDocument et, sur l’élément racine, appeler InnerText pour extraire le texte. Cela effacera toutes les tages HTML sous quelque forme que ce soit et traitera également des caractères spéciaux comme lt; nbsp; tout en un.
cette:
(<.+?> | )
correspondra à n'importe quelle balise ou
string regex = @"(<.+?>| )";
var x = Regex.Replace(originalString, regex, "").Trim();
alors x = hello
Désinfecter un document HTML implique beaucoup de choses difficiles. Ce paquet peut-être d’aide: https://github.com/mganss/HtmlSanitizer