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
4 Réponses :
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}'
Si vos noms de fichiers sont toujours comme ça, vous pouvez ajouter à votre expression régulière ^ pour ne correspondre qu'au début.
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.
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}
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.
probablement juste
r '^ \ d {2} - \ d {2} - \ d {2}'ou utilisezmatchsur le nom de base.