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

Java regex using Pattern and Matcher

我正在尝试使用匹配器作为表达式来在我的字符串列表中查找时间戳。 ex("[00:00:00.000]")时间戳前后有空格

我在线检查了我的正则表达式,它说它是正确的,但不适用于我的 java。它只是 returns 错误。

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

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

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

它会给你:

  • 小时 - 组 (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));
}
\s*\[[0-9:.]*\]\s*

使用 this.You 不需要 ^escape []。查看演示。

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

如果你想要时间戳使用

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

并捕获 group 1

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());
    }

}