1
votes

Expressions régulières pour correspondre à ces noms de fichiers PDF

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.


7 commentaires

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.


3 Réponses :


1
votes

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 $


0 commentaires

0
votes

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.


1 commentaires

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.



0
votes

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$


0 commentaires