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

6 投票
5 回答
49996 浏览
提问于 2025-04-17 04:06

我需要用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 个回答

1

我觉得你可以用 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 上进行了测试。

8

你想使用一个捕获组

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

应该打印出10-12-2001

你可以用更简短的正则表达式,但确保它前面有一个-,后面有一个.,可以在一定程度上防止与奇怪的文件名重复匹配,或者防止一些根本不应该匹配的错误文件名。

编辑:我把最开始的-换成了\b,这个可以匹配字母数字和非字母数字之间的边界。这样的话,无论前面是一个连字符还是字符串的开头,都能匹配到日期。

26

假设日期总是以这种格式出现:[月]-[日]-[年]。

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

撰写回答