Besoin d'aide sur une Regex

Résolu
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009 - 16 avril 2009 à 15:06
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009 - 16 avril 2009 à 17:26

9 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 avril 2009 à 17:09
Euh c'est un bête split... !!!
Si ca commence pas par DEBUT, il faut adapter... par exemple
source = source.Substring(source.IndexOf(
"DEBUT"
));

Ou alors, s'il faut commencer à faire trop de teste, tu peux quand même utiliser les regex, à toi de voir...
MatchCollection mc = Regex.Matches(source, "(DEBUT)(.*?)(FIN)", RegexOptions.Singleline);

<hr />
-Blog-
-Site Perso-
3
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 15:14
Bonjour tout le monde,

J'en ai plein le ... des Regex lol

voici mon problème/code :
string source = @"DEBUT aaa
aaa
aaa
FIN
DEBUT bbb
bbb
bbb
FIN
DEBUT ccc FIN
DEBUT ddd FIN";
               
Regex testo = new Regex(@"DEBUT(?<createContent>(.*\n)*FIN)");
MatchCollection m = testo.Matches(source);  
Match ess1 = m[0];
Match ess2 = m[1];
Match ess3 = m[2];

Actuellement, les match valent :
ess1 = DEBUT aaa

aaa

aaa

FIN

DEBUT bbb

bbb

bbb

FIN

ess2 part en exception.

Comment faire pour que :
ess1 = DEBUT aaa

aaa

aaa

FIN

ess2 =DEBUT bbb

bbb

bbb

FIN

ess3 =DEBUT ccc FIN

je vous remercie par avance.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 avril 2009 à 15:31
Salut,
Si tu veux le contenu entre début et fin, tu peux faire quelques chose comme ceci:

source.Split(mew string[] { "DEBUT", "FIN" }, StringSplitOption.RemoveEmptyEntries);

<hr />
-Blog-
-Site Perso-
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 15:45
En faite ma chaine de caractères est à la base dans un fichier.
Et il doit y avoir  à peu près 80 "DEBUT ..... FIN" à récupérer pour, par la suite, les tester un par un puis pour certains, récupérer des éléments à l'intérieur.

Je ne connais pas l'exemple que tu m'as mis donc je ne sais pas si je pourrai faire ce que je veux par la suite.

J'ai toujours utilisé des expressions régulières auparavant.
Ce n'est pas possible de réaliser ce que je souhaite à l'aide d'une expression régulière ?
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 avril 2009 à 15:54
Si tu peux ne pas utiliser des regex, n'en utilises pas! L'équivalent regex est environ 150x plus lent dans ce cas...
Grossomodo ça donnerait environ ça: Regex.Split(source, @"DEBUT|FIN", RegexOption.Multiline)

Les regex, c'est seulement si la "méthode traditionnelle" est trop complexe...

<hr />
-Blog-
-Site Perso-
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 16:20
Ah d'accord, je ne savais pas !

Je vais essayer de poursuivre avec la première solution alors :)

Par contre, pourquoi une cellule sur deux est vide dans le tableau de STRING ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 avril 2009 à 16:26
Parce qu'elle contient un \r\n...

<hr />
-Blog-
-Site Perso-
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 16:54
Je pense qu'il y a une erreur dans la première solution :
source.Split(mew string[] { "DEBUT", "FIN" }, StringSplitOption.RemoveEmptyEntries);

Si ma chaîne de caractères est de :
string source = @"ZZZZZZZZ
XXXXXXX
DEBUT aaa
aaa
aaa
FIN
DEBUT bbb
bbb
bbb
FIN
DEBUT ccc FIN
DEBUT ddd FIN";

La première cellule de mon tableau contiendra :
ZZZZZZZZ

XXXXXXX

Apparemment, cette solution permet d'insérer dans un tableau le début de la chaîne de caractères jusqu'au premier DEBUT ou FIN. Pour la seconde, Il fait la même chose à partir de l'endroit où il s'est arrêté.
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 17:26
merci bien, ça me va parfaitement :)
J'en ai essayé des plus compliqué pour régler ce problème ...

Encore merci ;)
0
Rejoignez-nous