регулярное выражение для разделения строки в Java - PullRequest
0 голосов
/ 10 ноября 2010

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

2010-11-10 00: 00: 00,999, следует следующая строка

Я использую

inputString.split("(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3},)");

Это дает строку [] с двумя элементами, вторым элементом является "некоторая строка следует", но первый элемент является пустой строкой, как получить первую часть строки.

Обновление: Не могу предположить, что дата будет в начале. Извините, что пропустил это раньше.

Ответы [ 4 ]

3 голосов
/ 10 ноября 2010

Вы, вероятно, не хотите разделяться. Аргумент Сплита - это разделение между строками. Таким образом, вы успешно сопоставляете метку времени, но split возвращает вам строку до этого (пусто) и после («следует некоторая строка»).

Вы, вероятно, хотите

Matcher m = Pattern.compile("(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3},)")
            .matcher("2010-11-10 00:00:00,999, some string follows");
if (m.find()) {
    String first_part = m.group(1);
}

(непроверенные!)

3 голосов
/ 10 ноября 2010

Почему бы не использовать SimpleDateFormat для анализа части даты, которая была разработана для этой задачи?

, например

DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
Date date = fmt.parse("2010-11-10 00:00:00,999");

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

String input = "2010-11-10 00:00:00,999, yada yada";
String dateInput = input.substring(0, input.indexOf(',', input.indexOf(',') + 1));

Или с помощью регулярных выражений (используя положительное выражение взгляда за спиной, чтобы убедиться, что это вторая запятая):

String dateInput = input.split("(?<=.*,.*),")[0];
0 голосов
/ 10 ноября 2010

Я не думаю, что вы снимаете правильные части. Регулярное выражение (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3},) фиксирует ВСЮ дату. Если вы добавляете группы захвата вокруг каждой части, то вы можете перебирать каждую захваченную группу. Что касается двух групп, то, как работают Java-регулярные выражения, так это то, что группа 0 - это вся совпадающая строка, а затем группы - это захваченные группы.

0 голосов
/ 10 ноября 2010

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

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