Python / Regex - 如何使用正则表达式从文件名中提取日期?

时间:2011-10-11 15:38:18

标签: python regex

我需要使用python从文件名中提取日期。日期采用以下格式:

month-day-year.somefileextension

示例:

10-12-2011.zip
somedatabase-10-04-2011.sql.tar.gz

提取这个的最好方法是使用正则表达式吗?

我有一些代码:

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

代码将打印'10'。关于如何打印日期的一些线索?

最诚挚的问候,

5 个答案:

答案 0 :(得分:10)

假设日期始终采用以下格式:[MM] - [DD] - [YYYY]。

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

答案 1 :(得分:5)

您想使用capture group

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

应打印10-12-2001

你可以使用更简洁的正则表达式,但确保它前面有一个-并后跟一个.提供了一些最小的保护,防止与时髦的文件名或格式错误的文件名的双重匹配根本不应该匹配。

编辑:我将-替换为\b,它匹配字母数字和非字母数字之间的任何边界。这样它将匹配日期之前是否有连字符或字符串的开头。

答案 2 :(得分:0)

你输入的\w+匹配了一个或多个单词字符,这是预期的结果。您要做的是使用两侧的环绕,匹配第一个连字符和句点之间出现的数字和连字符:

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

答案 3 :(得分:0)

我认为您可以按如下所示使用re.split提取日期

$ 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'

我使用Python 3.6.6,IPython 5.3.0运行了测试

答案 4 :(得分:0)

**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")