繁体   English   中英

使用模式和匹配器的Java正则表达式

[英]Java regex using Pattern and 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
\\s*\\[[0-9:.]*\\]\\s*

使用它。您不需要^ escape []参阅演示。

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

如果要使用时间戳记

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

并捕获group 1

尝试:

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

您的正则表达式不起作用,因为您没有先转义[字符,因此将其视为另一个字符类。 您可以通过将时间戳分组为([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));
}
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());
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM