2010-11-10 3 views
0

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

2010-11-10 00: 00: 00,999, некоторые строки следующим образом

Я использую

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

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

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

+1

Так какие части вы ждете? – StaxMan

+0

Я ожидаю, 2010-11-10 00: 00: 00,999, и некоторые строки следует – user444300

ответ

3

Возможно, вы не хотите разделить. Аргумент Split - это разделитель между строками. Таким образом, вы успешно сопоставляете временную метку, но 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); 
} 

(тестировался!)

+0

есть ли способ получить разделитель? <извините, предыдущий вопрос был для некоторого другого ответа> – user444300

+0

Что вы подразумеваете под «разделителем» здесь? –

+0

Я попытался использовать шаблон раньше, не мог заставить его работать. Выше, похоже, не работает. – user444300

3

Почему бы не использовать 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

Это правда, но я должен извлечь эту часть из строки ввода – user444300

+0

@ user444300: Я видел это, см. Мой обновленный ответ. –

+0

Да, но я не хочу считать, что дата будет в начале. – user444300

0

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

+0

изменится, поэтому я хочу что-то более общее – user444300

-2

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

+1

Проблема не в регулярном выражении. Это использование раскола –

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