You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配字符串中日期与文件大小的分组捕获问题咨询

正则优化方案:灵活捕获带年份的日期和文件大小

你的需求是根据字符串中是否存在**带年份的日期(MM-DD YYYY)和有效文件大小(数字+[TGMK]iB)**来灵活捕获,同时排除带时间的日期(如MM-DD HH:MM)和无效的大小字段。针对你的场景,我优化了正则表达式,同时兼顾匹配准确性和灵活性:

优化后的正则表达式

(?=.*?(?:\b\d{2}-\d{2}\s\d{4}\b|\b\d+(?:\.\d+)?\s*[TGMK]iB\b))(?:Uploaded\s+(\d{2}-\d{2}\s\d{4})\s*,)?\s*(?:Size\s+(?:(\d+(?:\.\d+)?\s*[TGMK]iB))?\s*,)?

(注:如果需要可读性,也可以拆分成多行,实际使用时合并为一行即可)

关键优化点解释

  1. 正向预查确保非空匹配:
    (?=.*?(?:\b\d{2}-\d{2}\s\d{4}\b|\b\d+(?:\.\d+)?\s*[TGMK]iB\b))
    确保字符串中至少存在带年份的日期或有效大小,避免返回空的匹配结果。

  2. 可选的日期捕获组:
    (?:Uploaded\s+(\d{2}-\d{2}\s\d{4})\s*,)?
    仅捕获Uploaded后带年份的日期格式(MM-DD YYYY),自动忽略带时间的日期(如示例2中的11-20 15:20)。整个组是可选的,所以当没有带年份的日期时,该分组返回空。

  3. 可选的大小捕获组:
    (?:Size\s+(?:(\d+(?:\.\d+)?\s*[TGMK]iB))?\s*,)?
    捕获Size后符合格式的大小值(支持整数/小数、可选空格、正确单位),当Size后无有效大小(如示例3)时,该分组返回空。

匹配测试(对应你的三个示例)

  1. 示例1:同时存在日期和大小

    Uploaded 11-20 2017, Size 11.93 GiB, ULed by P_O_O_P

    • 分组1(日期):11-20 2017
    • 分组2(大小):11.93 GiB
  2. 示例2:仅存在大小

    Uploaded 11-20 15:20, Size 11.93 GiB, ULed by P_O_O_P

    • 分组1(日期):空(因日期是带时间格式,不匹配MM-DD YYYY)
    • 分组2(大小):11.93 GiB
  3. 示例3:仅存在日期

    Uploaded 11-20 2017, Size, ULed by P_O_O_P

    • 分组1(日期):11-20 2017
    • 分组2(大小):空(因Size后无有效大小值)

额外建议

  • 使用命名分组提升可读性:如果你的编程语言支持(如Python、JavaScript ES2018+),可以用命名分组替代数字分组,更直观:
    (?=.*?(?:\b\d{2}-\d{2}\s\d{4}\b|\b\d+(?:\.\d+)?\s*[TGMK]iB\b))(?:Uploaded\s+(?P<date>\d{2}-\d{2}\s\d{4})\s*,)?\s*(?:Size\s+(?:(?P<size>\d+(?:\.\d+)?\s*[TGMK]iB))?\s*,)?
    
    捕获时可以直接通过date和size名称获取结果。
  • 边界匹配强化准确性:保留\b边界符,避免部分匹配(比如不会误把123-45 678当成日期,或12.3 K当成大小)。

内容的提问来源于stack exchange,提问作者Michael Schm.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:25:56