java中提取日期和时间的正则表达式
下面是我在每个字符串中的日期时间格式示例java中提取日期和时间的正则表达式,java,regex,Java,Regex,下面是我在每个字符串中的日期时间格式示例 March 9 12:31 AM and March 10 7:30 AM March 11 7:30 AM and March 12 10:30 AM March 31 9:00 PM and April 1 12:39 AM March 31 10:11 PM and April 1 5:23 AM 7:45 PM and 10:30 PM 我的字符串包含以下类型的日期。需要从每个字符串中提取两个日期时间 例如:从字符串1提取日期时间,如下所示:
March 9 12:31 AM and March 10 7:30 AM
March 11 7:30 AM and March 12 10:30 AM
March 31 9:00 PM and April 1 12:39 AM
March 31 10:11 PM and April 1 5:23 AM
7:45 PM and 10:30 PM
我的字符串包含以下类型的日期。需要从每个字符串中提取两个日期时间
例如:从字符串1提取日期时间,如下所示:
March 9 12:31 AM
March 10 7:30 AM
它应适用于所有月份名称。
我不想每个月验证30或31天
这是我现在的正则表达式。有时把小时当作日期
(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)|(\\s)[\\d]{1,2}(?!:)|(\\s)(1[012]|[1-9]):[0-5][0-9](\\s)(?i)(am|pm)+
有人能帮我解决这个问题吗
(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\s[\d]{1,2}\s)?(?:1[012]|[1-9]):[0-5][0-9]\s(?:am|pm)
解释
(?:(?):(?:一月?:二月?:二月?)三月?四月?五月?六月?七月?八月?九月?十月?十月?十一月?十二月?:余烬?)\s[\d]{1,2}\s
匹配0或1个月和日期组合谢谢你@Andreas的解释,所以我需要更改我的解释:
((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?) ([1-9]|[12]\d|3[01]) )?(\b([1-9]|1[012]):[0-5]\d (?i)(am|pm))
我使用\b来不赶时间,比如27:45 PM
,如果没有\b它赶时间7:45 PM
(误音2)
第一个版本是(不太好):
不验证此类日期:
March 31 10:71 PM and April 1 5:23 AM
27:45 PM and 10:80 PM
May 3 4:41 PM PDT and May 41 12:19 AM PDT
为什么不
“3月9日12:31 AM和3月10日7:30 AM”。拆分(“and”)
?它不支持7:45 pm和10:30 pm,并且该日期是Strings的一部分。您能否准确地告诉我们您希望从每个示例输入中匹配什么,此外,您的正则表达式在PDT 5月3日下午4:41和PDT 5月4日凌晨12:19之间不正确匹配的内容对于此条目,它正确匹配第一个日期(5月3日下午4:41)和下一个日期(5月4日下午1),但预期是(5月4日凌晨12:19)。我相信它会在外部层次上澄清你的问题,你的正则表达式是一个三向选择:(?:monthname)
或(\\s)[\\d]{1,2}(?:)
或(\\s)(1[012]|[1-9]):[0-5][0-9](\\s)(我)(am | pm)+
。为什么?它是否应该匹配(monthname dayofmonth)?时间
?嗨@Andreas,这部分有什么问题吗?你能写更多的细节吗?我的测试是您的正则表达式将捕获,7
作为月份的一天。逗号不是一个月中某一天的有效字符。--附带说明:1)无需将\d
放在[]
字符类中。它已经是一个字符类。--2) 考虑到性能,30 | 31
最好作为3[01]
和10 | 11 | 12
作为1[012]
3) 你的小时范围是0-12,但它应该是1-124) \b
是怎么回事?它保证前面有一个空格,所以它是多余的5) 你为什么要捕捉空白6) 您删除了AM/PM
匹配的不区分大小写。为什么月日是*
重复组?这不应该是一个?
可选组吗?@Andreas,你说得对。我已经更新了答案。谢谢
March 31 10:71 PM and April 1 5:23 AM
27:45 PM and 10:80 PM
May 3 4:41 PM PDT and May 41 12:19 AM PDT