C# et expression régulière

Résolu
kenshin24 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
kenshin24 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je dois utiliser les expressions régulières pour trouver des patterns dans des chaînes de caractères.
Je dois trouver des expressions commes celle-ci : $(nom) Où "nom" peut prendre n'importe qu'elle forme, soit des lettres minuscules et majuscule ainsi que des chiffres. Mais je dois garder la forme avec le signe de dollars en avant avec les deux parenthèses.

Je dois utiliser C# pour ce faire.

Merci de votre aide!!!
A voir également:

3 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
un petit exemple qui peut t'aider:
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
 class Program
    {
               
        static void Main(string[] args)
        {
            Regex  r = new Regex("^\\${1}\\({1}[a-zA-Z09]+\\){1}$");
            string[] b = { "bonjour", "$(enrev", "$(bienvu)","$(" };
            for (int i = 0; i < b.Length; i++)
            {
                if (r.IsMatch(b[i]))
                    Console.WriteLine(b[i]+"gagner");
                else
                    Console.WriteLine(b[i]+"perdu");
            }
            Console.ReadLine();
        }
    }
}

@+
1
kenshin24 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Wow cool!!

Deux petites choses. J'ai essayer et il ne prend pas en compte les chiffres. S'il y a un ou plusieurs chiffres entre les parenthèses, ça ne fonctionne pas. J'ai essayé de modifier en ajoutant un tirert entre le 0 et le 9 comme pour les lettres :
Regex r = new Regex("^\\${1}\\({1}[a-zA-Z0-9]+\\){1}$");
Mais ça ne change rien.


Autre élément, peut-être que je n'ai pas été assez descriptif. Je lis un fichier texte dans lequel est insérer des tokens comme décrit : $(nom). Je dois parcourir le fichier texte et remplacer toutes les occurances par une valeur prédéfinie.

Si je fais :
Regex r = new Regex("^\\${1}\\({1}[a-zA-Z09]+\\){1}$");
String ligneFichierTexte = "Bonjour, mon nom est $(nom)";
MatchCollection collections = r.Matches(ligneFichierTexte, 0); //Le 0 c'est le premier caractère à vérifier.
si je fais
Console.WriteLine(collections.Count);
Et ça me retourne 0.

J'ai réussis à faire quelque chose en faisant String.Split() et j'analyse chaque mot. Cela marche par contre.
Est-ce que je suis oubligé de faire le split ou il existe quelque chose pour analyser la ligne au complet.


Merci!!!
0
kenshin24 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
En parlant avec du monde avec qui je travaille, j'ai découvert mon problème.
Voici le RegHex qui marche :
Regex tokenFinder = new Regex("\\${1}\\({1}[a-zA-Z0-9\\-_\\.]+\\){1}");

J'ai supprimé le ^ au début et le $ à la fin. Bref, ça limitait la chaîne à avoir seulement ce que je voulais chercher. J'ai aussi ajouter le 0-9 (il fallait le tiret) ainsi que la possibilité d'avoir les caractères -, _ et . à l'intérieur du token.

Bref, tout marche!

Merci beaucoup!!!
0