J’essaie de résoudre ce problème depuis un moment maintenant.
J’ai besoin d’une expression rationnelle pour supprimer les nouvelles lignes, les tabulations et les espaces entre les balises html illustrées dans l’exemple ci-dessous:
La source:
Some title
Résultat recherché:
Some title
Le rognage des espaces avant le “titre” est facultatif. Je serais reconnaissant pour toute aide
s/\s*(<[^>]+>)\s*/\1/gs
ou, en c #:
Regex.Replace(html, "\s*(<[^>]+>)\s*", "$1", RegexOptions.SingleLine);
Si le code HTML est ssortingct, chargez-le avec un lecteur XML et réécrivez-le sans formater. Cela préservera les espaces au sein des balises, mais pas entre elles.
\ d ne correspond pas seulement [0-9] à Perl 5.8 et 5.10; il correspond à tout caractère UNICODE ayant l’atsortingbut digit (y compris “\ x {1815}” et “\ x {FF15}”). Si vous voulez dire [0-9] vous devez soit utiliser [0-9], soit utiliser le pragma octets (mais toutes les chaînes sont transformées en caractères sur 1 octets et ne correspondent normalement pas à ce que vous voulez).
Les expressions rationnelles sont fondamentalement mauvaises pour l’parsing HTML (voir Pouvez-vous donner quelques exemples des raisons pour lesquelles il est difficile d’parsingr XML et HTML avec une expression régulière? Pourquoi ? ). Ce dont vous avez besoin, c’est d’un parsingur HTML. Voir Pouvez-vous fournir un exemple d’parsing HTML avec votre parsingur préféré? pour des exemples utilisant une variété d’parsingurs.
Vous pouvez trouver la réponse HTMLAgilityPack utile.
s/>\s+>
Cela supprime les espaces entre les balises et l’espace entre les balises et le texte.
s/(\s*(<))|((>)\s*)/\2\4/g
Regex.Replace(input, "<[^>]*>", Ssortingng.Empty);
Essaye ça:
s/[^\w\/\d<>]+/gs
Une solution avec XSLT ressemblerait à ceci:
Vous pouvez choisir le modèle que vous souhaitez utiliser. Le premier supprime tous les espaces, même lorsque le contenu existe, et le second, uniquement lorsqu’il y a des espaces ou des nouvelles lignes.
Je voulais préserver les nouvelles lignes, car la suppression des nouvelles lignes perturbait mon langage HTML. Alors je suis allé avec ce qui suit. .
private static ssortingng ProcessHTMLFile(ssortingng input) { ssortingng opt = Regex.Replace(input, @"( )*", "", RegexOptions.Singleline); opt = Regex.Replace(opt, @"[\t]*", "", RegexOptions.Singleline); return opt; }