2016-09-29 2 views
1

У меня есть список строк, содержащий время в следующем формате.Regex соответствует числу между цифрами

15 min 43 sec 

Я хочу, чтобы извлечь 43 только. Я тренировался в http://regexr.com/, но не смог найти ответа. Ответ, который я пришел сейчас, - \d+\s+min+\s+(\d*)+\s+sec, который соответствует всему слову. Но он должен соответствовать только 43. В ожидании помощи в ближайшее время. Заранее спасибо.

+1

На самом деле ваше регулярное выражение работает. Конечно, полное выражение совпадает. Вы получаете '43' в первой * группе *. Это также видно во всплывающем меню в regexr. –

+0

Как насчет '(\ d +) \ ssec {1}' –

+0

Просьба пояснить, как ваш вопрос связан с Java. Я бы проголосовал за удаление тега java, так как ваш вопрос * только * о поиске регулярного выражения. Как это может быть реализовано в Java, это другая тема. (И теги 'pattern-matching' и' regex-lookarounds' также должны быть удалены.) –

ответ

0

Следующая картинка содержит две группы , которые фиксируют группы (в минутах и ​​секундах) и допускает произвольное количество пробелов между значениями. Если нужно извлечь только секунды, одной группы хватит.

Для того, чтобы извлечь значения, матч против входа (с использованием Matcher) и прочитать значение по группе (matcher.group(n), где 1 первая группа):

Pattern pattern = Pattern.compile("(\\d+)\\s*min\\s*(\\d+)\\s*sec"); 
String[] data = {"15 min 43 sec", "15min 43sec", "15  min 43 sec"}; 
for (String d : data) { 
    Matcher matcher = pattern.matcher(d); 
    if (matcher.matches()) { 
     int minutes = Integer.parseInt(matcher.group(1)); 
     int seconds = Integer.parseInt(matcher.group(2)); 
     System.out.println(minutes + ":" + seconds); 
    } else { 
     System.out.println("no match: " + d); 
    } 
} 
+1

Peter Я хочу регулярное решение, а не java-решение. Но ваш ответ прекрасен. благодаря –

1

Рудиментарный и быстро решение может быть ... \s(\d+)\s Но попытаться найти лучше один;)

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