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
添加回答
舉報