Python/正则表达式 - 如何用正则从文件名中提取日期?
我需要用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)