我有两个奇怪的日期范围:
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/2022
或01-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
使用了什么正则表达式来避免两种格式都匹配日期格式?
如果我的字符串以日期开头,那当然很容易。表达式前面的^可以解决我的问题。但是有时日期会被其他东西包裹住。
答案 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})
。