如何使用正则表达式处理类似的日期格式?

时间:2019-06-18 14:04:27

标签: regex oracle

我有两个奇怪的日期范围:

01.01-02.01.2022
01-02.01.2022

为了以通常的格式(01.01.2022提取拳头日期,我必须使用正则表达式检测两种情况:

对于01.01-02.01.2022

\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{4} 

对于01-02.01.2022(也是01-02/01/202201-02\01\22

\d{2}-\d{2}[/\.\\]\d{2}[\./\\]\d{2,4}

问题为01。 01-02.01.2022 中包含 01-02.01.2022

我为01.01-02.01.2022使用了什么正则表达式来避免两种格式都匹配日期格式?

如果我的字符串以日期开头,那当然很容易。表达式前面的^可以解决我的问题。但是有时日期会被其他东西包裹住。

1 个答案:

答案 0 :(得分:1)

您可以使用

(^|\D\.|[^0-9.])(\d{2}-\d{2}[/.\]\d{2}[/.\]\d{2,4})($|\D)

请参见regex demo。抓住组2的值。

详细信息

  • (^|\D\.|[^0-9.])-第1组:字符串(^的开头,非数字字符和点(\D\.)或除数字和点之外的任何字符({{1 }})
  • [^0-9.]-第2组(这是您需要提取的):2位数字,(\d{2}-\d{2}[/.\]\d{2}[/.\]\d{2,4}),2位数字,-/. ,两位数字,\/.,两位,三位或四位数字
  • \-第3组:字符串(($|\D))或非数字字符($)的结尾

如果要与\D匹配2或4位数字,则必须将其替换为\d{2,4}(\d{4}|\d{2})