2009-09-01 10 views
0

J'ai le code HTML suivant:Comment supprimer des caractères entre les balises HTML

<h1>Text Text</h1>  <h2>Text Text</h2> 

J'essaie toujours d'obtenir une poignée sur les expressions régulières, et d'essayer de créer un qui éliminerait l'espacement entre les balises.

Je voudrais que le résultat final à:

<h1>Text Text</h1><h2>Text Text</h2> 

Toute aide serait grandement appréciée!

MISE À JOUR

Je voudrais dépouiller tous les espaces blancs, des onglets et de nouvelles lignes. Donc, si j'ai:

<div> <h1>Text Text</h1>  <h2>Text Text</h2>  </div> 

Je voudrais que ça finisse comme:

<div><h1>Text Text</h1><h2>Text Text</h2></div> 
+0

Tous les espaces blancs ou seulement et onglets? Si vous préservez les nouvelles lignes, voulez-vous toujours éliminer les espaces et les onglets? Pour tous les noms de tag ou spécifiquement h1 puis h2? – AnthonyWJones

+0

Bon point! Je veux juste éliminer les espaces blancs, les nouvelles lignes et les onglets. – mattruma

+0

Doit être agnostique. – mattruma

Répondre

1

Si c'est juste ce cas précis, voici un regex approprié pour trouver tous les espaces:

Regex regexForBreaks = new Regex(@"h1>[\s]*<h2", RegexOptions.Compiled); 

Cependant, je pense qu'une regex est la mauvaise approche ici si c'est un cas plus général. Par exemple, il est possible que les balises soient imbriquées dans d'autres balises, puis votre problème nécessite un peu plus de détails pour trouver la bonne réponse. Comme l'a dit Jamie Zawinski, «Certaines personnes, lorsqu'elles sont confrontées à un problème, pensent:« Je sais, j'utiliserai des expressions régulières ». Maintenant, ils ont deux problèmes."

+0

Je ne suis pas certain de comprendre ce dernier mot. Supprimer h1 et h2 et vous avez le cas général, quel problème supplémentaire percevez-vous? – AnthonyWJones

+0

Bon point! Je veux juste éliminer les espaces blancs, les nouvelles lignes et les onglets. – mattruma

+0

@AnthonyWJones: Vous ne pouvez pas faire cela. Imaginez ce cas: "

foo
bar
baz
". L'espace est intentionnel ici et l'enlever changera le sens. –

0

Une alternative à l'utilisation d'une regex ou d'un remplacement de chaîne est le pack Html Agility.

Voici une estimation approximative:

/// <summary> 
/// Regular expression built for C# on: Tue, Sep 1, 2009, 03:56:27 PM 
/// Using Expresso Version: 3.0.2766, http://www.ultrapico.com 
/// 
/// A description of the regular expression: 
/// 
/// <h1> 
///  <h1> 
/// [1]: A numbered capture group. [.+] 
///  Any character, one or more repetitions 
/// </h1> 
///  </h1> 
/// Match expression but don't capture it. [\s*] 
///  Whitespace, any number of repetitions 
/// <h2> 
///  <h2> 
/// [2]: A numbered capture group. [.+] 
///  Any character, one or more repetitions 
/// </h2> 
///  </h2> 
/// 
/// 
/// </summary> 
public static Regex regex = new Regex(
     "<h1>(.+)</h1>(?:\\s*)<h2>(.+)</h2>", 
    RegexOptions.Singleline 
    | RegexOptions.CultureInvariant 
    | RegexOptions.Compiled 
    ); 


// This is the replacement string 
public static string regexReplace = 
     "<h1>$1</h1><h2>$2</h2>"; 
0

Que diriez-vous: Regex.Replace(str, @">\s+<","><")

+0

Vous ignorez les situations où vous avez des caractères légitimes entre crochets: '>' – Welbog

+0

Addendum: Par "manque", je veux dire que c'est trop zélé. Cela supprimera l'espace entre '>' et ' même si ce n'est pas le cas. – Welbog

+0

Est-ce que ">" HTML valide même? N'avez-vous pas besoin d'utiliser une référence (>) pour les accolades inclinées dans le texte d'un élément? – Darryl

Questions connexes