为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式以中间日期搜索文件

正则表达式以中间日期搜索文件

慕少森 2021-05-12 17:22:03
我正在尝试创建一个正则表达式,以匹配中间有日期的文件:文件名看起来像这样"Weekly Score 07.27.2018 Report.csv" "Weekly Score 08.03.2018 Report.csv"该文件夹可以有多个这样的文件,我想用此模式匹配任何文件。我正在服务器上为此编写python代码。
查看完整描述

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} - 年。


查看完整回答
反对 回复 2021-05-25
?
隔江千里

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


查看完整回答
反对 回复 2021-05-25
  • 3 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号