Regex pour matcher "abc.bcd.efgh.ChaineFinale" [Résolu]

eric.bryan 4 Messages postés dimanche 15 juin 2014Date d'inscription 21 août 2016 Dernière intervention - 20 août 2016 à 23:58 - Dernière réponse : eric.bryan 4 Messages postés dimanche 15 juin 2014Date d'inscription 21 août 2016 Dernière intervention
- 21 août 2016 à 18:23
Bonjour à tous,
Je recherche une regex qui matche des chaines de type :
"aaa.bcd.efgh.ChaineFinale"
où ChaineFinale est une constante et aaa.bcd.efgh. est une suite variable
de chaines composées de n'importe quelle suite de caractères (excepté les espaces) terminée par
un '.' (point).
using System.Text.RegularExpressions;
...
string sPatternDataTable = @"([^\s]\.)*ChaineFinale";
Regex regexObj;
regexObj = new Regex(sPatternDataTable, RegexOptions.IgnoreCase | RegexOptions.Multiline | 
RegexOptions.Singleline);
string sContent = "aaa.bcd.efgh.ChaineFinale";
Match match = regexObj.Match(sContent);
            if (match.Success)
            {
                string sProc = "Success";
            }


Mais cette regex ne fonctionne pas et Match.Success retourne false.
Merci beaucoup par avance.
Eric.

EDIT : Ajout des balises de code
Afficher la suite 

3 réponses

Répondre au sujet
KX 15089 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 14 décembre 2017 Dernière intervention - 21 août 2016 à 11:45
0
Utile
Bonjour,

En faisant
[^\s]\.
tu imposes d'avoir un seul caractère non espace suivi d'un point. Ton problème voudrait plutôt que tu ais
[^\s]*\.
pour chacun de tes blocs.
Toutefois, comme
\.
n'est pas dans
\s
on pourrait directement mettre
[^\s]+
moyennant un
\.
avant la
ChaineFinale
:

[^\s]+\.ChaineFinale

Testé sur http://regexr.com/3e2h5
Commenter la réponse de KX
eric.bryan 4 Messages postés dimanche 15 juin 2014Date d'inscription 21 août 2016 Dernière intervention - 21 août 2016 à 18:11
0
Utile
Merci beaucoup pour ta réponse KX.

J'ai testé ta solution mais elle ne répond pas tout à fait à mon besoin.

J'ai besoin de matcher le cas où il n'y a pas de bloc (terminant par un point) avant "ChaineFinale".

Or le fait d'enlever "\." du bloc exige qu'il y ait un point avant "ChaineFinale".

Eric.
Commenter la réponse de eric.bryan
eric.bryan 4 Messages postés dimanche 15 juin 2014Date d'inscription 21 août 2016 Dernière intervention - 21 août 2016 à 18:23
0
Utile
Finalement la regex qui me convient semble être :

([^\s]+\.)*ChaineFinale

Puisque je veux 0 ou plusieurs blocs se terminant par un point.

Merci encore à KX qui a débloqué la situation.

Eric.
Commenter la réponse de eric.bryan

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.