2015-04-02 2 views
1

Я пытаюсь сопоставить форматы даты с регулярным выражением. Пример дата каждый:Regex, чтобы соответствовать не числовому значению или концу строки в Python

02 Apr 15 
02 Apr 2015 

Регулярное выражение, я использую, чтобы соответствовать Первый:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})") 

И второе:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{4})") 

Теперь вопрос, который я У меня есть то, что вторая дата будет соответствовать первому регулярному выражению, хотя она содержит 4 цифры, а не только 2. Я хотел добавить конец строки в регулярное выражение, но иногда есть время, добавленное к нему (Ie 4: 32). Итак, я хочу, чтобы первое регулярное выражение соответствовало соответствующей дате с возможностью отсутствия после него или пробела + материала после него. Таким образом, первый один должен соответствовать:

"02 Apr 15" 
"02 Apr 15 5:23" 

но не совпадают:

"02 Apr 2015" 
"02 Apr 2015 5:23" 

Следует плюхнулся на другой регулярное выражение. Итак, в значительной степени важными являются только первые 3 (dd Mmm YY и dd Mmm YYYY).

ответ

0

Что вы ищете это слово граница т.е .:

re.compile("\\b([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})\\b") 

Это удостоверится 4 цифры года не соответствует при попытке сопоставления первой даты в ваших примерах.

Однако вы должны рассмотреть Python date parse routine

+1

удивительным! Я добавлю код регулярного выражения прямо сейчас, поскольку он следует за тем, как написано скрипт. Тем не менее, я обязательно буду больше разбираться в синтаксическом разборе; если это сделает скрипт лучше, я сделаю это. – user2869231

Смежные вопросы