Recherche sous chaine [Résolu]

Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
5
3
Merci
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 ;)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
5
3
Merci
Par contre il va falloir ajouter le caractère "_" dans le pattern... autrement ça ne passera pas !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
0
Merci
ca aussi c'est possible
- chaine OK => "aaaaaaaaa"
- chaine OK => "aaaaa.aaa.aaa"
- chaine OK => "#aaa.aaa$aaaaaa.aaaaaa."



DT
Commenter la réponse de babe59
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
5
0
Merci
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 $ !!
Commenter la réponse de LUDINSKI
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
0
Merci
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
Commenter la réponse de babe59
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
5
0
Merci
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 !?
Commenter la réponse de LUDINSKI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.