[英]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
它会给你:
用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.