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

Signaler
Messages postés
6
Date d'inscription
dimanche 15 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2020
-
Messages postés
6
Date d'inscription
dimanche 15 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2020
-
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

3 réponses

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122
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
Messages postés
6
Date d'inscription
dimanche 15 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2020

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.
Messages postés
6
Date d'inscription
dimanche 15 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2020

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.