【问题标题】:Regex: Date Exact Match正则表达式:日期完全匹配
【发布时间】:2017-02-08 12:00:57
【问题描述】:

我在日期时间上有一个小问题

2014 年 4 月 15 日

我写了这个正则表达式:\D+[a-z] \d{2}, \d{1,4}

问题是当我有日期之前的文本时,例如:

文字文字 2014 年 4 月 15 日文字

好吧,在这种情况下,我的正则表达式还选择了文本,而不仅仅是日期。所以我需要稍微修改一下我的正则表达式来严格查找我的日期,而不是之前或之后的文本。

谁能帮帮我?

【问题讨论】:

    标签: regex date formula


    【解决方案1】:

    只需使用[a-zA-Z]+ 来匹配月份名称:

    [a-zA-Z]+ \d{2}, \d{1,4}
    

    regex demo

    另外,如果您需要在更大的字符串中匹配这些字符串,请考虑使用字边界\b[a-zA-Z]+ \d{2}, \d{1,4}\b,或者如果您需要完整字符串匹配,请考虑使用锚点:^[a-zA-Z]+ \d{2}, \d{1,4}$

    请注意:\d{1,4} 匹配 1 到 4 位数字。如果您计划匹配 4 位数年份,请使用 \d{4}。如果您打算匹配 2 位或 4 位数字的年份,请使用 (\d{4}|\d{2}),但这次您确实需要单词边界或锚点。

    【讨论】:

    • @Drako:这取决于文本的匹配位置。我在附加说明中添加了这一点。
    【解决方案2】:

    对于您的情况,您应该小心,因为您的 date 可能是这样的:
    aprila lot of space15 space,space2014
    那么这个正则表达式是不安全的:
    [a-zA-Z]+ \d{2}, \d{1,4} 它可以随心所欲地匹配,但 安全吗? 不,因为 single space 违反了规则。 p>

    这是一个安全的正则表达式:
    \w+\s+\d+,\s+\d+

    您仍然可以通过包围^$ 使其更安全,对您来说最安全的正则表达式是:
    ^\w+\s+\d+,\s+\d+$

    prove

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多