6
votes

Python / Regex - Comment extraire la date du nom de fichier en utilisant une expression régulière?

J'ai besoin d'utiliser Python pour extraire la date des noms de fichiers. La date est dans le format suivant:

import re
m = re.search('(?<=-)\w+', 'derer-10-12-2001.zip')
print m.group(0)


0 commentaires

5 Réponses :


8
votes

Vous souhaitez utiliser un Capture Group .

m = re.search('\b(\d{2}-\d{2}-\d{4})\.', 'derer-10-12-2001.zip')
print m.group(1)


2 commentaires

Votre REGEXP ne correspond pas si le nom de fichier commence par une date (comme dans le premier exemple). Une façon de résoudre ce problème serait de remplacer l'union initiale dans votre motif avec (?: ^ | -) .


Hein, tu as raison. Je n'ai même pas remarqué cet exemple. Édition maintenant.



0
votes

Eh bien, le \ w + vous mettez correspond à un ou plusieurs caractères de mots à la suite d'un hypancier, c'est donc le résultat attendu. Ce que vous voulez faire, c'est utiliser un regard sur le point de vue de chaque côté, des nombres assortis et des traits d'union qui se produisent entre le premier trait d'union et une période:

re.search (r '(? <= - -) [\ d -] + (? = \ \.)', nom). GROUP (0)


0 commentaires

24
votes

En supposant que la date est toujours au format: [mm] - [jays] - [AAA].

re.search("([0-9]{2}\-[0-9]{2}\-[0-9]{4})", fileName)


2 commentaires

Notez que pour utiliser la sortie de cette option, vous recevrez une liste de retour: résultat = re.search ("([0-9] {2} \ - [0-9] {2} \ - [0-9] {4}) ", nom de fichier) résultat [0] # donnera ce que vous voulez


Ajout au ci-dessus [0-9] {2,4} / [0-9] {2} / [0-9] {2,4} correspondra '2017/02/23' et '23 / 02/2017 ' les deux. De même, [0-9] {2,4} \ - [0-9] {2} \ - [0-9] {2,4} correspondra à 2017-02-23 et à 23-02-2017.



1
votes

Je pense que vous pouvez extraire la date à l'aide de Re.Split comme suit

$ ipython

In [1]: import re

In [2]: input_file = '10-12-2011.zip'

In [3]: file_split = re.split('(\d{2}-\d{2}-\d{4})', input_file, 1)

In [4]: file_split
Out[4]: ['', '10-12-2011', '.zip']

In [5]: file_split[1]
Out[5]: '10-12-2011'

In [6]: input_file = 'somedatabase-10-04-2011.sql.tar.gz'

In [7]: file_split = re.split('(\d{2}-\d{2}-\d{4})', input_file, 1)

In [8]: file_split
Out[8]: ['somedatabase-', '10-04-2011', '.sql.tar.gz']

In [9]: file_split[1]
Out[9]: '10-04-2011'


0 commentaires

0
votes
**This is simple method to find date from text file in python**
import os
import re
file='rain.txt' #name of the file
if(os.path.isfile(file)): #cheak if file exists or not
    with open(file,'r') as i:
        for j in i: #we will travarse line by line in file 
            try:
                match=re.search(r'\d{2}-\d{2}-\d{4}',j) #regular expression for date
                print(match.group()) #print date if match is found
            except AttributeError: 
                pass
else:
    print("file does not exist")

0 commentaires