Преобразуйте дату с помощью регулярного выражения с 24 декабря на 24 декабря или 24 декабря 2009 года. - PullRequest
1 голос
/ 30 июня 2009

Я получаю подтверждение путешествия, которое выглядит так: "SQ 966 E 27JUL SINCGK" = "Airline Space Flight Space BookingClass Space Date_with_Month_as_name Space 3LetterFrom 2LetterTo". Я могу разбить все это на куски, используя регулярные выражения, чтобы представить его на веб-сайте. Но сайт ожидал бы вместо 27 июля 27.07.2009 или, по крайней мере, 27/07. Есть ли способ преобразовать результат регулярного выражения на основе части во входных данных. Январь -> 01, февраль -> 02 ... дек -> 12.

(Regex - это Java)

Ответы [ 4 ]

5 голосов
/ 30 июня 2009

DateFormat - более подходящий класс:

DateFormat output = new SimpleDateFormat("dd/MM", Locale.US);
DateFormat input = new SimpleDateFormat("dd MMM", Locale.US);
System.out.println(output.format(input.parse("24 Dec")));

выход:

24/12
1 голос
/ 30 июня 2009

В синтаксисе Perl (s{pattern}{replacement}):

s{([0-9][0-9])JAN}{\1/01}
s{([0-9][0-9])FEB}{\1/02}
s{([0-9][0-9])MAR}{\1/03}
s{([0-9][0-9])APR}{\1/04}
s{([0-9][0-9])MAY}{\1/05}
s{([0-9][0-9])JUN}{\1/06}
s{([0-9][0-9])JUL}{\1/07}
s{([0-9][0-9])AUG}{\1/08}
s{([0-9][0-9])SEP}{\1/09}
s{([0-9][0-9])OCT}{\1/10}
s{([0-9][0-9])NOV}{\1/11}
s{([0-9][0-9])DEC}{\1/12}

(Да, это долго и безобразно, но, вероятно, это сработает).

0 голосов
/ 30 июня 2009

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

Извлечение каждого бита информации вручную. Разумность проверяет все, и затем использует синтаксический анализатор SimpleDateFormat, чтобы получить объект Date, который вы можете использовать с этого момента.

0 голосов
/ 30 июня 2009

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

В качестве альтернативы, вы можете использовать DateFormatSymbols.getShortMonths() и выполнять итерации по месяцам для определения индекса * и форматирования строки вручную.

* не забудьте добавить 1;)

редактирование:

Я не уверен, что то, что вы ищете, возможно в Java regex без возможности вносить изменения в код. Условные конструкции, которые поддерживает Perl, не поддерживаются Java, поскольку Java обеспечивает поддержку if-then-else в качестве языковой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...