Rechercher : dans
Par :

C# et expression régulière

Dernière réponse le 30 jun 2009 à 16:50:07 kenshin24, le 29 jun 2009 à 22:39:18 
 Signaler ce message aux modérateurs

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!!!

Configuration: MacBook Pro 15", 4go ram, hdd 250go
Firefox 3.0.11

Meilleures réponses pour « C# et expression régulière » dans :
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

chuka, le 29 jun 2009 à 23:11:38

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();
        }
    }
}

@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka

2

kenshin24, le 30 jun 2009 à 16:02:14

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!!!

Répondre à kenshin24

3

 kenshin24, le 30 jun 2009 à 16:50:07

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!!!

Répondre à kenshin24
Collection CommentÇaMarche.net