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 :

Regex : aide


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut Regex : aide
    Bonjour,

    Je suis débutante en .Net.
    Je souhaite transformer une chaine de caractère mot1_mot2_mot3 en Mot1Mot2Mot3 par exemple (le nombre de _ n'est pas fixe).
    J'ai testé le bout de code suivant pour essayer au moins d'obtenir mot1mot2mot3 mais ça ne fonctionne pas. Ma méthode static :
    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
    public static string transformSqlToClasse(string sqlName)
            {
                Regex regex = new Regex("(_)+");
                Match match = regex.Match(sqlName);
                if (match.Success)
                {
                    for (int i = 0; i < match.Groups.Count; i++)
                    {
                        Group g = match.Groups[i];
                        if (g.Success)
                        {
                            regex.Replace(sqlName, g.Value + "  ");
                        }
                    }
                }
     
                return sqlName;
            }
    Mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string className = MaClasse.transformSqlToClasse("mot1_mot2_mot3");
                Console.WriteLine(className);
    La sortie = mot1_mot2_mot3.

    HELP !!
    Merci de votre aide !

    WwAvE

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    tu peux faire plus simplement que passer par des RegExs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    string s = "mot1_mot2_mot3";
                    string st = s.Replace("_", string.Empty);

  3. #3
    Membre confirmé Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Par défaut
    Tu peux également utiliser la fonction Split() afin de découper ta chaîne en plusieurs sous chaînes (ce qui est utile si tu désires mettre en majuscule la première lettre de chaque mot).

    Voici un bout de code simplifiable à souhait

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
            static void Main(string[] args)
            {
                // La chaîne initiale
                string maChaîne = "mot1_mot2_mot3_mot4";
                // La chaîne une fois transformée
                string maNouvelleChaîne = Transform(maChaîne, '_');
     
                // Affichage du résultat
                Console.WriteLine(maNouvelleChaîne);
                Console.Read();
            }
     
            /// <summary>
            /// La fonction de transformation.
            /// </summary>
            /// <param name="chaîne">La chaîne à transformer.</param>
            /// <param name="séparateur">Le séparateur (dans notre cas: _).</param>
            /// <returns>Chaîne transformée.</returns>
            static string Transform(string chaîne, char séparateur)
            {
                // Utilisation d'un StringBuilder (pourrait être remplacé par un simple string).
                StringBuilder result = new StringBuilder();
     
                // Séparation de la chaîne en sous chaînes (mots dans notre cas).
                string[] mots = chaîne.Split(séparateur);
     
                // Traitement de chaque mot séparément.
                foreach (string s in mots)
                {
                    // Variable qui va nous servir à stocker les caractères composants le mot.
                    string motFinal = "";
     
                    // Récupération de chacun des caractères formant le mot (utile pour mettre en majuscule la première lettre).
                    char[] mot = s.ToLower().ToCharArray();
     
                    // Ajout de la première lettre (mise en majuscule).
                    motFinal += mot[0].ToString().ToUpper();
     
                    // Ajout des autres lettres.
                    for (int i = 1; i < mot.Length; i++)
                    {
                        motFinal += mot[i].ToString();
                    }
     
                    // Ajout de notre mot dans le StringBuilder.
                    result.Append(motFinal);
                }
     
                // On retourne le résultat sous la forme d'une chaîne.
                return result.ToString();
            }
    Amicalement,

    Nicolas.

  4. #4
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    ça parait si simple ! J'ai voulu faire trop compliqué !
    Merci de votre aide !

    WwAvE

  5. #5
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Re !

    Je dois faire l'inverse maintenant... transformer une chaine Mot1Mot2Mot3 en mot1_mot2_mot3.

    Là mon code est le suivant :
    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
    20
    public static string TransformClasseToSql(string classeName)
            {
                string result = classeName;
     
                Regex regex = new Regex("([A-Z)+");
                Match match = regex.Match(result);
                if (match.Success)
                {
                    for (int i = 0; i < match.Groups.Count; i++)
                    {
                        Group g = match.Groups[i];
                        if (g.Success)
                        {
                            regex.Replace(result, "_" + g.Value.ToLower());
                        }
                    }
                }
     
                return result.ToLower();
            }
    Et il me donne comme résultat : Mot1mot2mot3... Il aurait au moins du me retourner mot1mot2mot3 étant donné que je retourne result.ToLower() non ??

    En plus de ça, j'ai créé un test unitaire qui me dit que tout a réussit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [TestMethod]
            public void TransformClasseToSqlTest()
            {
                string sqlName = StringUtils.TransformSqlToClasse("Mot1Mot2Mot3");
                Console.WriteLine(sqlName);
                Assert.Equals(sqlName, "mot1_mot2_mot3");
            }
    Et il m'écrit dans la console :
    Mot1mot2mot3
    Merci !

    WwAvE

  6. #6
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Bon en fait cela me retourne bien mot1mot2mot3... manque plus que les _ !
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Regex]aide à l'écriture d'une regex
    Par DonKnacki dans le forum VBA Access
    Réponses: 0
    Dernier message: 22/10/2012, 13h48
  2. [RegEx] Aide pour une REGEX svp
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2006, 17h41
  3. [RegEx] Aide pour une REGEX
    Par Death83 dans le forum Langage
    Réponses: 6
    Dernier message: 28/06/2006, 15h50
  4. [Regex] besoin d'aide sur des motifs
    Par Oluha dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2005, 11h23
  5. une aide sur un regex svp :)
    Par hansaplast dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 11h22

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