以下是我在每个字符串中的样本日期时间格式
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
我的字符串包含以下类型的日期。需要从每个字符串中提取两个日期时间。
对于ex:from string 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)+
任何人都可以帮我解决这个问题吗
答案 0 :(得分:0)
正则表达式:
(?:(?: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)
解释
(?:(?: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)?
匹配0或1个月和日期组合
答案 1 :(得分:-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)
第一个版本(不太好):
((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)(\s)([1,2][\d]|[1-9]|30|31)(\s))?(\b[\d]|10|11|12):[0-5][0-9]\s(AM|PM)
不验证此类日期:
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