Je recherche une expression régulière pour correspondre au fileNamePattern.
Les fichiers PDF peuvent avoir les noms suivants: 8 caractères alphanumériques, -
, 4 caractères alphanumériques, -
, 4 caractères alphanumériques, -
, 4 caractères alphanumériques , -
, 12 caractères alphanumériques + .pdf
.
Exemples:
^[A-Z][0-9]{8}[-][A-Z][0-9]{4}[-][A-Z][0-9]{4}[-][A-Z][0-9]{4}[-][A-Z][0-9]{12}[.]pdf
J'utilise p >
5b7f991f-0726-4dd5-856e-7cea820f02c5.pdf 138bcee6-db7f-47a7-97bf-69c0b3989698.pdf e988315b-ade7-48e5-9733-35bb59a3c28d.pdf
Cependant, je ne suis pas sûr que ce soit correct car je n'obtiens aucune correspondance.
3 Réponses :
Regex r = new Regex (@ "^ \ w {8} - \ w {4} - \ w {4} - \ w {4} - \ w {12} \. pdf $") ;
Si vous ne voulez explicitement pas de traits de soulignement, vous pouvez utiliser:
^ [a-zA-Z \ d] {8} - [a-zA-Z \ d] {4} - [a-zA-Z \ d] {4} - [a-zA -Z \ d] {4} - [a-zA-Z \ d] {12} \. Pdf $
Regex est sensible à la casse (sauf si vous le spécifiez pour ignorer la casse en utilisant RegexOptions
.
À l'heure actuelle, le principal problème est que votre expression régulière dit de faire correspondre une lettre, puis de faire correspondre n
chiffres au lieu de correspondre à n
caractères alphanumériques.
En définissant l'indicateur insensible à la casse, votre expression régulière peut se simplifier en:
^ [AZ \ d] {8} - [AZ \ d] {4} - [AZ \ d] {4} - [AZ \ d] {4} - [AZ \ d] {12 } \. pdf $
Cela devrait fonctionner /(\w{8})-(\w{4})-(\w{4})-(\w{4})-(\w{12})(.pdf)/i
Je l'ai essayé ici à Test RegEx
\ w = alphanmumérique {n} = heures auxquelles le signe doit apparaître
gi = sont des indicateurs: "i" = insensible à la casse.
En C #, les modèles d'expression régulière ne sont pas définis avec des indicateurs comme celui-ci, le modificateur g
n'est pas pris en charge, la notation littérale d'expression régulière n'est pas utilisée.
Vous ne faites correspondre que des lettres majuscules dans votre expression régulière, et lorsque vous utilisez [AZ] [0-9] {4}
, vous ne faites pas correspondre quatre caractères alphanumériques, vous faites correspondre une lettre suivie de quatre chiffres .
Vous devez donc fusionner [AZ] [0-9]
en classes à un seul caractère [A-Z0-9]
puis utilisez un indicateur insensible à la casse.
De plus, vous devez utiliser $
à la fin de l'expression régulière pour que le modèle corresponde à la chaîne entière.
Utiliser
var pattern = @"(?i)^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$"; // check if the string matches the pattern if (Regex.IsMatch(s, pattern) { // The string matches... }
Voir la démo regex a >
En C #,
var rx = new Regex(@"^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$", RegexOptions.IgnoreCase);
Notez que l'insensibilité à la casse peut être définie avec un modificateur en ligne (? i)
:
^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$
Veuillez partager le modèle d'expression régulière que vous avez essayé.
^ [AZ] [0-9] {8} [-] [AZ] [0-9] {4} [-] [AZ] [0-9] {4} [-] [AZ] [0-9 ] { 4} [-] [AZ] [0-9] {12} [.] Pdf
Je ne sais pas si c'est correct. Je suis un peu confus avec .pdf
Existe-t-il un moyen de tester ce modèle
N'utilisez pas
\ w
, mais aussi correspond aux traits de soulignement et à de nombreux autres caractères dans .NET. Voir ma réponse avec toutes les explications et la solution exacte.\ d
correspond également à un grand nombre de caractères auxquels vous ne vous attendez pas.BTW, vous pouvez utiliser regex101.com (pour créer manuellement) et regexstorm.net/tester (pour voir s'ils fonctionnent en .NET) pour tester les expressions rationnelles.
Heureux que cela ait fonctionné pour vous. Veuillez également envisager de voter pour si ma réponse vous a été utile.