Recherche sous chaine [Résolu]

Signaler
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
-
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

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
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 ;)
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Par contre il va falloir ajouter le caractère "_" dans le pattern... autrement ça ne passera pas !
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

ca aussi c'est possible
- chaine OK => "aaaaaaaaa"
- chaine OK => "aaaaa.aaa.aaa"
- chaine OK => "#aaa.aaa$aaaaaa.aaaaaa."



DT
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
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 $ !!
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

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
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
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 !?