【问题标题】:Matching regex groups starting from the end从末尾开始匹配正则表达式组
【发布时间】:2020-05-01 07:38:49
【问题描述】:

我可以有以下字符串:

20200124 (year-month-day)
202001   (year-month)
0124     (month-day)
24       (day)

我正在尝试提出一个正则表达式,以便能够根据捕获组匹配上述所有字符串。 我的正则表达式:

^(?<year>\d{4})?(?<month>\d{2})?(?<day>\d{2})$

注意:到目前为止,我没有考虑对输入的字符串进行任何类型的验证,我目前有兴趣正确匹配它们。

正则表达式存在一些问题,因为它在所有情况下都不能正确匹配。

例如:20200124 匹配正确,而 202001 也匹配,但 01day 组而不是 month 组中匹配。或者2020 匹配monthday

我不确定是否有可能只用一个正则表达式来匹配上面列出的所有可能性?

【问题讨论】:

  • 您在“月-日”下列出了"24";你是说"24" 是 2 月 4 日吗?如果是这样,你在“day”下也列出了"24",那么如何区分是哪一种方式解析呢?
  • 我已经用更清晰的例子更新了这个问题

标签: regex


【解决方案1】:

我会说年月的情况使所有可能性都不规则,我会手动解析字符串。您没有指定编程语言,所以这是伪代码:

if date.length = 6 then
    month = date.right(2)
    year = date.left(4)
else
    day = date.right(2)
    month = date.substring(date.length-4, date.length-2)
    year = date.substring(date.length-8, date.length-6)
end

+/- 1 在需要的地方。根据子字符串的实现,您可能需要添加额外的字符串长度检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多