首页 > 解决方案 > 匹配日期,不包括月份中的 0

问题描述

我们有如下命名的文件:
d31_20210315-19232.sql.tar.gz
d31_20201215-19232.sql.tar.gz

匹配年份很容易:
(?<=_)(?P<year>\d{4})

匹配没有 0 的月份让我陷入困境:
(0(?P<month>[1-9]))|((?P<month>[1][1-9]))
这是不允许的,但描述了我想要做什么。

与我想忽略 0 并匹配组内的 1-9 或 12-31 的那一天相同:
(?P<day>

我正处于尝试围绕正则表达式捕获进行编码以获得所需结果的阶段,但它一直困扰着我,我无法得到这个。

标签: regexregex-group

解决方案


你可以试试这个:

(?<=_)(?P<year>\d{4})0?(?P<month>\d+)(?=\d\d-)0?(?P<day>\d+)
  • (?<=_)(?P<year>\d{4})与年份相匹配。
  • 0?(?P<month>\d+)(?=\d\d-)匹配月份,忽略0如果有的话。还要确保在 group 之后month,仍然有 2 位数字,前面有一个破折号。
  • 0?(?P<day>\d+)匹配当天,忽略0如果有的话。

检查测试用例


推荐阅读