2012-05-09 2 views
1

Я пытаюсь сопоставить разные форматы дат, которые я разбираю из разных файлов. Например, один формат даты: «Thu, 12 Nov 2009 14:17:44 -0000»Соответствующая строка с регулярным выражением, содержащим двоеточие

Когда я пытаюсь сопоставить эту строку с первым регулярным выражением, я получаю истинный результат, когда я использую второй, который я получаю ложный.

[A-Za-z]{3},\\s+\\d{2}\\s+[A-Za-z]{3}\\s+\\d{2}.* (1. regex) 
[A-Za-z]{3},\\s+\\d{2}\\s+[A-Za-z]{3}\\s+\\d{2}:.* (2. regex) 

По-моему, оба регулярных выражения должны соответствовать указанному выше формату даты. Где мой отказ?

ответ

1

Я подозреваю, что последняя часть «\ s + \ d {2}:. *» Должна совпадать с «14:», но вы забыли год. Таким образом, анализатор ожидает «:», но находит второй ноль в 2009 году

Что вам нужно что-то вроде этого:

[A-Za-z]{3},\\s+\\d{2}\\s+[A-Za-z]{3}\\s+\\d{4}\\s+\\d{2}:.* (2. regex) 

(я думаю, что должно пройти :))

1

Вы, кажется, забыли четырехзначный год, поэтому второе регулярное выражение не является правильным.

Последняя часть вашего первого регулярного выражения соответствует первым двум цифрам 2009, а затем все после.

0

У вас есть забыл год:

"[A-Za-z]{3},\\s+\\d{2}\\s+[A-Za-z]{3} \\p{Digit}{4} (\\p{Digit}{2}:){2}[0-9][0-9].*";

Вы также можете проверить час в другом формате.

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