IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

remplacement d'une chaine avec une regex


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 57
    Points : 42
    Points
    42
    Par défaut remplacement d'une chaine avec une regex
    Bonjour,

    J'ai un problème concernant la construction d'une regex .
    Ma chaîne complète étant du code html, dans ce code se trouve des balise img qui contiennent un style avec la dimension de l'image .

    Mon problème étant que les dimension width et height ne se termine pas par "px".

    Voici un exemple plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <P STYLE="text-align:Justify;font-size:11;">
      <IMG src="http://www.wiki-plantes.fr/images/banniere.jpg"
      STYLE="width:454;height:129.068868353914;font-size:11;" />
    </P>
    Je souhaiterai à l'aide d'une regex,ou autres, ajouter "px" aux dimensions de mon image.

    merci

    Kévin

  2. #2
    Membre chevronné

    Homme Profil pro
    Appui fonctionnel senior
    Inscrit en
    Juin 2007
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Appui fonctionnel senior
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 461
    Points : 2 211
    Points
    2 211
    Par défaut
    Bonjour,

    Si ton but est de manipuler du HTML, je te conseille d'utiliser le Html Agility Pack, qui sera non seulement plus facile à mettre en œuvre mais aussi plus performant.

    En utilisant les RegEx, tu devrais pouvoir utiliser quelque chose dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RegEx regEx = new RegEx(@"width:(\d{*})");
    string result = regEx.Replace(codeHtml, @"width:\1px");

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 671
    Points : 1 171
    Points
    1 171
    Par défaut
    Bonsoir,
    j'utiliserais les deux.
    HtmlAgilityPack pour naviguer dans le HTML pour atteindre la valeur de l'attribut "STYLE" des "IMG" et ensuite pour la réimporter une fois modifiée.
    Entre, utiliser une Regex pour modifier cette valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.Load(pathFileToLoad);
                HtmlNodeCollection images = doc.DocumentNode.SelectNodes("//img");
                if (images != null)
                {
                    foreach (HtmlNode image in images)
                    {
                        string stylImg = image.GetAttributeValue("style", "");
                        if (!string.IsNullOrEmpty(stylImg))
                        {
                            stylImg = Regex.Replace(stylImg, "(width:\\d+\\.?\\d*)", "$1px");
                            stylImg = Regex.Replace(stylImg, "(height:\\d+\\.?\\d*)", "$1px");
                            image.SetAttributeValue("style", stylImg);
                        }
     
                    }
                }
     
                doc.Save(pathFileToSave);
    A voir ...

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Il vaut mieux effectivement utiliser un parser HTML pour sélectionner le bon attribut de la bonne balise puis y appliquer l'expression rationnelle.

    Cependant, si tu veux faire sans et n'utiliser qu'une expression rationnelle, celle de Lutarez n'est pas suffisante. Elle remplacerait toute occurrence de "width: xxx", peut importe si on est bien dans une image ou non.

    Une plus exacte serait "(?<=<img\\s+[^>]*)(?<=style=\"[^\"]*)(?<p>width|height)\\s*:\\s*(?<v>[0-9.]+)(?=\\s|;|\")"
    L'expression de remplacement : ${p}:${v}px

    Elle ne remplace que les width et height contenus dans l'attribut "style" d'une balise "img" et dont l'unité n'est pas spécifiée.
    Si tu as "width:729em", ça ne remplacera pas par "width:729pxem".

    Attention, ce n'est pas parce qu'elle est plus précise qu'elle est sans défaut et qu'elle fonctionnera dans tous les cas possibles.

Discussions similaires

  1. Isoler une chaine d'une chaine, problème de regex?
    Par PaJe1005 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/06/2012, 09h36
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Réponses: 3
    Dernier message: 18/03/2008, 14h28
  5. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo