使用Pattern和Matcher的Java正则表达式

时间:2015-08-11 19:17:15

标签: java regex matcher

我正在尝试使用matcher作为表达式来查找字符串列表中的时间戳。 Ex(“[00:00:00.000]”)时间戳之前和之后有空格

我在线检查了我的正则表达式,它说它是正确的,但不适用于我的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

3 个答案:

答案 0 :(得分:2)

//Pseudo-code    
obj1[0]["AUDCAD"]["t"].push(obj2[0]["AUDCAD"]["t"]);

使用此功能。您不需要\\s*\\[[0-9:.]*\\]\\s* ^ escape。请参阅演示。

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

如果您想使用时间戳

[]

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

答案 1 :(得分:1)

尝试:

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

你的正则表达式不起作用,因为你没有转义第一个[字符,所以它被视为另一个字符类。您可以通过将时间戳关闭到组中来获取时间戳:([0-9:.]*),但是,如果您的时间戳始终如下所示,您可以通过以下方式获得单独的时间值:

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

它会给你:

  • 小时 - 小组(1),
  • min - group(2),
  • sec - group(3),
  • msec - group(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));
}

答案 2 :(得分: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());
    }

}