0
votes

Correspond à deux chiffres exacts, pas plus en utilisant une expression régulière

J'essaie d'obtenir la date sting à partir du nom de fichier en utilisant une expression régulière dans un script python. Voici ma piqûre de date

'2012-09-25 ag.pdf'

Pour obtenir la chaîne de date de ce nom de fichier, utilisez cette expression régulière r '\ d {4} [-] \ d {1,2} [-] \ d {1,2}' et ça marche bien

mais certains noms de fichiers contiennent également une année à deux chiffres et pour ceux qui essaient une autre expression régulière r'\d{2}-\d{2}-\d{2}'

'2012-09-25 ag.pdf' correspond également à la deuxième expression régulière ( r '\ d {2} - \ d {2} - \ d {2}' < / code>) qui pose problème avec mon script

Comment puis-je utiliser regex en python pour faire correspondre exactement deux chiffres pas plus que cela


1 commentaires

probablement juste r '^ \ d {2} - \ d {2} - \ d {2}' ou utilisez match sur le nom de base.


4 Réponses :


0
votes

En supposant que votre date sera toujours au début du nom de fichier, vous pouvez ancrer votre expression régulière comme ceci:

r'^\d{2}-\d{2}-\d{2}'

Plus de documentation ici

MODIFIER: Peut également utiliser une correspondance ou :

r'^(\d{2}|\d{4})-\d{2}-\d{2}'


0 commentaires

0
votes

Si vos noms de fichiers sont toujours comme ça, vous pouvez ajouter à votre expression régulière ^ pour ne correspondre qu'au début.


0 commentaires

1
votes

vous avez au moins 3 options ici:

Première option : faites d'abord correspondre la date de l'année à 4 chiffres, et elle correspond, n'essayez pas de faire correspondre la date de l'année à 2 chiffres.

Deuxième option : modifiez votre option d'année à 2 chiffres pour qu'elle soit plus restrictive:

r'^\d{2}-\d{2}-\d{2}'

Troisième option : utilisez match sur le nom de base, pas search . match essaie de correspondre depuis le début. S'il trouve 4 chiffres, ce sera une non-correspondance.


0 commentaires

2
votes

Vous pouvez créer une expression régulière pour les deux cas:

^\d\d(\d\d)?-\d{1,2}-\d{1,2}

Démo: https://regex101.com/r/nZwZ58/4/

Le point positif de cette première version est qu'elle est plus simple et lisible, le problème est qu'elle correspondra à une date 3 chiffres.

Le suivant est plus spécifique mais plus détaillé .

^\d{2,4}-\d{1,2}-\d{1,2}

Démo: https://regex101.com/r/nZwZ58/3/


2 commentaires

Cela n'entraînera-t-il pas des correspondances pour les noms de fichiers avec des années à 3 chiffres? Ce serait probablement des erreurs.


Oui, vous avez raison @PyPingu. J'ai ajouté une deuxième option plus verbeuse mais plus précise. Merci de votre commentaire.