IEn*_*tor 1 regex ordinals date
如何修改下面的正则表达式以匹配日期部分的日期?这个正则表达式匹配"2003年1月1日| 2004年2月29日| 3202年11月02日"但我也需要它匹配:"2003年1月1日| 2004年2月29日| 11月02日,3202 | 2010年3月3日"
^(?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)\ 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sept|Nov|Dec)(ember)?)\ (0?[1-9]|([12]\d)|30))|(Feb(ruary)?\ (0?[1-9]|1\d|2[0-8]|(29(?=,\ ((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))\,\ ((1[6-9]|[2-9]\d)\d{2}))
Run Code Online (Sandbox Code Playgroud)
谢谢.
这将取决于您的用例,但为了实用主义,您可能只需匹配匹配的任何内容:
(1)任何月份名称或缩写;
(2)空白;
(3)任何一个或两个数字;
(4)空白;
(5)任何st,nd,rd,th;
(6)空格或逗号+可选空格;
(7)任何四位数字;
我不确定你在匹配什么,但是如果我有Jan 35nd,3001,我想我现在宁愿抓住它并使其失效,而不是在开始时跳过它.
另外,根据您的数据集,考虑的区分大小写问题和国际通用的英语变体,比如1 Jan 2004或1st Jan, 2004或January, 2004等.
换行符
^(?:j(?:an(?:uary)?|un(?:e)?|ul(?:y)?)?|feb(?:ruary)?|ma(?:r(?:ch)?|y)
|a(?:pr(?:il)?|ug(?:ust)?)|sep(?:t|tember)?|oct(?:ober)?|(?:nov|dec)(?:ember)?)
\s+\d{1,2}(?:st|nd|rd|th)?(?:\s+|,\s*)\d{4}\b
Run Code Online (Sandbox Code Playgroud)
除非你有一个非常奇怪的数据集,否则更实用(和可读)是允许在公共前缀之后的任何内容:
(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*?\s+\d{1,2}(?:[a-z]{2})?(?:\s+|,\s*)\d{4}\b
Run Code Online (Sandbox Code Playgroud)
这会匹配octagenarianism 99xx, 0000吗?是.这可能是个问题吗?我对此表示怀疑.