Recherche sous chaine

Résolu
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015 - 28 avril 2011 à 17:18
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 - 28 avril 2011 à 19:49
Bonjour,
j'ai une chaine de la forme "aaaaa#aaa.aaa$aaaaa#aaa.aaa$aaaaaa" où a est un caractère alphanumeric.
j'aimerai la coupée de la manière suivante:
1 : aaaaa
2 : #aaa.aaa$
3 : aaaaa
4 : #aaa.aaa$
5 : aaaaaa

en fait "#aaa.aaa$" correspond à la sous chaine qui doit me permettre de spliter ma chaine principale. Cette sous chaine doit toujours avoir la même forme : # + chaine d'alphanumeric sans blanc + "." + chaine d'alphanumeric sans blanc + "$"
Je sais qu'il faut faire cela avec un regex mais je ne sais pas construire la pattern.
Avant le split, j'aimerai vérifier que ma chaine est bien contruite, je peux commencer, finir par "#aaa.aaa$" et avoir plusieurs occurences de #aaa.aaa$ dans une même chaine

Ex
chaine OK = > "aaaaa #aaa.aaa$ aaaaa#aaa.aaa$aaaaaa"
chaine OK => "aaaaa#aaa.aaa$aaaa aa aaaaa"
chaine OK = > "aaaaa #aaa.aaa$ "
chaine OK => "#aaa.aaa$aaaaaa#aaa.aaa$aaaa"
chaine OK = > " #aaa.aaa$ "

chaine NOK => "aaaa#aaaaaa$aaaa" // pas de "."
chaine NOK = > "aaaa #aaa.aaaa.aaa$ aaaa" // trop de "."
chaine NOK => "aaaa#aaa.aaaa aaa$aaaa" // blanc
chaine NOK => "aaaa#aaa.aaaaaaaa" // pas de $

Pouvez-vous m'aider ?


DT

6 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 avril 2011 à 18:52
Bonsoir !

Voilà ce que je te propose :

Regex regex = new Regex( @"#{1}[a-zA-Z]+\.[a-zA-Z]+\${1}" );

string chaine = "#aaa.aaa$bbbbbb#cccc.cc$ddddddd";
foreach( Match match in regex.Matches( chaine ) )
{
    if( match.Success )
    {
        string ignoresAvant = chaine.Substring( 0, match.Captures[ 0 ].Index );
        string ignoresApres = chaine.Substring( match.Captures[ 0 ].Index + match.Captures[ 0 ].Length );
        string chaineOk = match.ToString();
    }
}


Dans cette exemple, il y aura 2 matchs : #aaa.aaa$ et #cccc.cc$

Testes et dis moi si c'est tout bon ;)
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 avril 2011 à 19:49
Par contre il va falloir ajouter le caractère "_" dans le pattern... autrement ça ne passera pas !
3
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
28 avril 2011 à 17:37
ca aussi c'est possible
- chaine OK => "aaaaaaaaa"
- chaine OK => "aaaaa.aaa.aaa"
- chaine OK => "#aaa.aaa$aaaaaa.aaaaaa."



DT
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 avril 2011 à 18:56
Ha

Y'a un truc que je n'est pas compris dans ton deuxième post :
ça aussi c'est bon "aaaaa.aaa.aaa" ? pourtant il n'y a pas de # ni de $ !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
28 avril 2011 à 19:18
en fait, je vais récupérer une chaîne d'erreur. Cette chaine contiendra du texte et des variables. ces variables seront en fait "nom d'une table sql + "." + nom de colonne.
Ex : "Le client #TBL_Customer.CustomerName$ n'est plus actif".
Donc parfois on pourra avoir une chaine sans variable...

DT
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 avril 2011 à 19:48
Ben alors, c'est bon...
Le Regex te permettra de récupérer les variables (dans chaineOK).
Après je ne sais pas ce que tu veux faire de ta chaîne d'erreur !?
0
Rejoignez-nous