Regex pour matcher "abc.bcd.efgh.ChaineFinale"

Résolu
eric.bryan Messages postés 6 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 3 juillet 2020 - Modifié par jordane45 le 21/08/2016 à 02:13
eric.bryan Messages postés 6 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 3 juillet 2020 - 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

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
21 août 2016 à 11:45
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
0
eric.bryan Messages postés 6 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 3 juillet 2020
21 août 2016 à 18:11
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.
0
eric.bryan Messages postés 6 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 3 juillet 2020
21 août 2016 à 18:23
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.
0
Rejoignez-nous