C# et expression régulière

Résolu/Fermé
kenshin24 Messages postés 34 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 26 octobre 2009 - 29 juin 2009 à 22:39
kenshin24 Messages postés 34 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 26 octobre 2009 - 30 juin 2009 à 16:50
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 samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
29 juin 2009 à 23:11
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 jeudi 12 juillet 2007 Statut Membre Dernière intervention 26 octobre 2009
30 juin 2009 à 16:02
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 jeudi 12 juillet 2007 Statut Membre Dernière intervention 26 octobre 2009
30 juin 2009 à 16:50
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