3 回答

TA贡献1995条经验 获得超2个赞
使用(0?[1-9] | 1 [012])。(0?[1-9] | [12] [0-9] | 3 [01])。\ d {4}:
import re
files = ["Weekly Score 07.27.2018 Report.csv", "Weekly Score 08.03.2018 Report.csv"]
result = []
for filename in files:
m = re.search(r"\s(0?[1-9]|1[012])\.(0?[1-9]|[12][0-9]|3[01])\.\d{4}\s", filename)
if m:
result.append(m.group())
print(result)
(0?[1-9]|1[012]) -个月(从01到12)
(0?[1-9]|[12][0-9]|3[01]) -天(从01到31)。
\d{4} - 年。

TA贡献1906条经验 获得超10个赞
您不应该使用正则表达式来匹配日期时间,因为这可能导致误报。
使用获取文件glob,对其进行迭代,并使用datetime.datetime.strptime空格分隔的第三字段检查日期时间模式:
import glob
import datetime
files = glob.iglob('Weekly Score * Report.csv') # Make necessary changes
# on the pattern, if you want
for file_name in files:
try:
datetime.datetime.strptime(file_name.split()[2], '%m.%d.%Y')
except ValueError:
continue
# Matched; do stuffs
print(file_name)
例子:
In [960]: files = ["Weekly Score 07.27.2018 Report.csv", "Weekly Score 08.03.2018 Report.csv", "Weekly Score 15.23.2018 Report.csv"]
In [961]: for file_name in files:
...: try:
...: datetime.datetime.strptime(file_name.split()[2], '%m.%d.%Y')
...: except ValueError:
...: continue
...: print(file_name)
...:
...:
Weekly Score 07.27.2018 Report.csv
Weekly Score 08.03.2018 Report.csv
添加回答
举报