regex - RegEx 匹配多种日期格式
问题描述
我有以下 RegEx 语句,它将返回匹配月、日和年的日期格式(例如 2001 年 1 月 1 日)
[12]\d|3[01]))|\w+\s\d{2},\s\d{4}
我想修改它以包含缩写月份中的匹配项,并且在第二天有或没有逗号。因此,例如匹配将包括以下内容:
Jan 01 2001
Jan 01, 2001
January 01 2001
January 01, 2001
我相信我有下面需要的部分内容,但我似乎无法将它们放在一起。任何帮助,将不胜感激。
(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)
解决方案
你在正确的轨道上。需要什么:
- 将捕获组转为非捕获组
\b
在单词之前和之后添加单词边界- 将数字范围与
(?:0[1-9]|[1-2][0-9]|3[01])
- 匹配可选的逗号
,?
,后跟空格 - 锚点在字符串的开头
^
和结尾$
。
您可以使用:
^\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}$
正则表达式演示在这里。
如评论中所述,如果需要不区分大小写(?i)
,请在模式开头添加选项。如果模式在更大的字符串中,只需删除锚点:
(?i)\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}
正则表达式演示在这里。
顺便说一句,对于诸如June
or之类的月份July
,您可以分别简单地使用June?
andJuly?
而不是Jun(?:e)?
and Jul(?:y)?
。
推荐阅读
- php - 在循环内执行 SQL SELECT 查询
- android - 查询sqlite导入的数据库时Android Studio“没有这样的表”错误
- python - 尝试在 pyTMX 中获取 TileImageByGid 时出现 AttributeError
- kubernetes - 有没有办法在 kubernetes 部署(或 statefulset)中为每个 pod 创建一个持久卷?
- android - Android Studio 3.4 - 错误 transformDexWithInstantRunSlicesApkForAwsDebug
- swift - 谓词查找不存在的 ID?
- angular - 如何在 Angular 2+ 中处理错误消息
- windows - Cordova 通过 windows cmd 发布 Android - 签名问题
- python-2.7 - 如何使用python进行xml解析
- c++ - ascii 值和几个扩展 ascii 字符的符号,如欧元符号