2015-08-11 3 views
1

Я пытаюсь использовать matcher как выражение, чтобы найти метки времени в моем списке строк. Ex ("[00: 00: 00.000]") Есть белые пробелы до и после отметки времениJava regex using Pattern and Matcher

Я проверил мое регулярное выражение онлайн, и он сказал, что это правильно, но не будет работать с моей java. Он просто возвращает false.

String word = " [00:00:00.000] "; 
Pattern pattern = Pattern.compile("^\\s[[0-9:.]*]\\s"); 
Matcher matcher = pattern.matcher(word); 
    if(matcher.matches()){ 
     //Do Stuff 
    else 
     //Do other Stuff 
+0

OK .. пожалуйста ясно .. Вы хотите, чтобы извлечь метку времени или просто проверить, если ваша строка содержит временную метку? – TheLostMind

+0

вам просто нужно избежать первого '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. Причина в том, что угловые скобки являются особым символом в регулярных выражениях. Поэтому проверка регулярных выражений неверна. Поэтому я думаю, что это также вызвало бы проблемы на других языках программирования. (Обратите внимание, что в java вам нужно будет дважды уйти ('\\ [' и '\\]') – bvdb

ответ

2
\\s*\\[[0-9:.]*\\]\\s* 

Использование this.You не нужно ^. escape[]. Смотрите демо.

https://regex101.com/r/eX9gK2/11

Если вы хотите использовать временные метки

\\s*\\[([0-9:.]*)\\]\\s* 

и захватить group 1

+0

OP говорит *, чтобы найти временные метки *. Это * соответствует * timestamps :) – TheLostMind

+1

@TheLostMind не выглядит так ... это было бы просто с ' find' – vks

+0

Ну в этом случае '\\ [\\ d {2}: \\ d {2}: \\ d {2} \\. \\ d {3} \\]' был бы правильным ответом – TheLostMind

1

Попробуйте с:

^\\s\\[[0-9:.]*]\\s 

Вы регулярное выражение не работает, потому что вы did't бежать первый [ характер, поэтому он рассматривается как другой класс персонажа. Вы можете получить временную метку, закрыв его в группу: ([0-9:.]*), но и, если метка времени всегда выглядеть следующим образом, вы можете получить отдельные значения времени с:

^\\s\\[(\\d+):(\\d+):(\\d+)\\.(\\d+)*]\\s 

это даст вам:

  • HRs - группа (1),
  • мин - группа (2),
  • сек - группа (3),
  • мс - группа (4),

тест это в Java:

public static void main(String args[]){ 
    String word = " [00:00:00.000] "; 
    Pattern pattern = Pattern.compile("^\\s\\[(\\d+):(\\d+):(\\d+)\\.(\\d+)*]\\s"); 
    Matcher matcher = pattern.matcher(word); 
    matcher.find(); 
    System.out.println(matcher.group(1) + ":" + matcher.group(2) + ":" + matcher.group(3) + "." + matcher.group(4)); 
} 
+1

Второй '' 'также нужно экранировать. –

+1

@MattBall в Java не нужно, он будет работать, я протестировал его –

+0

Не работало для меня :( – EsotericRider

0
package test; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import static org.junit.Assert.assertTrue; 
import org.junit.Test; 

public class RegexTest { 

    @Test 
    public void assert_pattern_found() { 
     final String word = " [00:00:00.000] "; 
     final Pattern pattern = Pattern.compile("^\\s\\[[0-9:.]*\\]\\s"); 
     final Matcher matcher = pattern.matcher(word); 

     assertTrue(matcher.matches()); 
    } 

}