[RegEx] Trouver la chaine rejetée
Bonjour,
[Pour info]
La chaine ci-dessous constitue un message dont chaque ligne est appelée segment identifié par les 3 premiers caractères.
Certains segments sont répétables,optionnels et peuvent aussi être regroupés.
Code:
1 2 3 4
|
MSH|^~\&|SRLMED|BPTRU|CIT|PROFIL<CR>
SFT|1|MP0245|PP2548||JEAN^JACQUES<CR>
MSA|1|R2578|R264|ECO^ECOGRAPHIE|<CR> |
Je souhaiterai vérifier qu'un message est bien constitué d'une suite définie de segments. J'ai donc crée une expression réguliere relative à mon message et j'ai testé une chaine constitée de la concaténation des 3 premiers caracteres de chaque ligne.
Ce qui donne:
Code:
1 2 3 4 5 6 7 8 9 10
| string text1 = "MSHSFTMSA";
string text2 = "MSZSFTMSA";
string pat = @"(MSH)(SFT)(MSA)+(ERR)*";
Regex r = new Regex(pat);
Match m = r.Match(text1);
if (m.Success)
Console.WriteLine("message ok");
else
Console.WriteLine("message pas ok"); |
test1 vérifie bien mon expression réguliére mais pas test2 à cause du Z.
Comment faire pour récupérer la cause du non matching de la chaine et idéalement la position du bloc en erreur?
J'ai beau chercher via les différents tuto mais je vois pas comment faire...
Si vous avez des idées quitte à faire sans les expression régulières, je suis preneur mais vu la complexité de certains messages je préférerai utiliser les Regex...