首页 > 解决方案 > 正则表达式无法检测到,(逗号)

问题描述

我正在尝试验证日期字符串,为此我编写了以下正则表达式字符串

[0-3]*\d{1}(st|nd|rd|th)?[\s\-\/]?(Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December|[0-1]?\d{1})[\s\-\/,]?(\d{4}|\d{2})

我的正则表达式的字符串输入是"31st March, 2018"

我已经,在我的正则表达式字符串([\s\-\/,]部分)中包含(逗号字符),但上面的输入无法验证。

谁能指出上面的正则表达式字符串需要什么更正,以便它可以检测字符串中的,(逗号)字符?

标签: c#regex

解决方案


您缺少逗号和年份之间的空格。你应该添加 \s? 在匹配逗号的块之后。

[0-3]?\d{1}(st|nd|rd|th)?[\s\-\/]?(Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December|[0-1]?\d{1})[\s\-\/,]?\s?(\d{4}|\d{2})

此外,您不需要在[]中转义字符,或者指定一个量词以仅匹配一个字符,因此您只需将您的正则表达式更改为:

[0-3]?\d(st|nd|rd|th)?[ -/]?(Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December|[0-1]?\d)[ -/,]?\s?(\d{4}|\d{2})

演示

PS:我不太了解 C#,所以不能代表其他人推荐使用 Datetime,但听起来可能值得一试。


推荐阅读