用正则表达式拆分java日志行

问题描述 投票:1回答:4

我正在尝试拆分一个如下所示的日志行:

15:10:10,408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1|9=317|35=D|49=verifix|

进入这样的事情:

15:10:10 
408
INFO
NioProcessor-11
FIXT.1.1
317
D
verifix

分裂的每个信息。

我试图用split函数拆分它

mystring.split((,)| \\\|)将我的代码拆分成类似的东西:

15:10:10
408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1
9=317
35=D
49=verifix

然后我采取了第二次分裂408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1 并做了一个子串。它起作用,但并不完美,因为有时第二次拆分更长或更短,看起来不是一个好的解决方案。

我想知道是否有可能实际上用正则表达式分割该字符串。我是regex的新手,我没有找到一种方法来编写一个处理我的目标的表达式。

java regex
4个回答
1
投票

See regex in use here

(?:> [^:]+: |\d+=|[ ,|<>])+
  • (?:)+匹配以下任何一个或多个选项 > [^:]+:匹配> ,然后一个或多个除:之外的任何角色,然后: \d+=匹配一个或多个数字,然后= [ ,|<>]匹配集合中的任何角色

结果:

15:10:10
408
INFO
NioProcessor-11
FIXT.1.1
317
D
verifix

0
投票

如果您搜索通用解决方案,这可能会有所帮助

    final String first = "15:10:10,408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1|9=317|35=D|49=verifix|";
    final String second = "408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1";

    String pattern = "[,| ]";
    Arrays.stream(first.split(pattern)).forEach(System.out::println);
    System.out.println("--------------------------");
    Arrays.stream(second.split(pattern)).forEach(System.out::println);

但是如果要获取指定的元素,请使用组和特定模式。


0
投票

@alaaeddine zammel更具体

    final String input = "8=FIXT.1.1|9=317";
    final String groupPattern = "\\d=([A-Z\\.\\d]*)\\|\\d=([A-Z\\.\\d]*)";
    final Pattern p = Pattern.compile(groupPattern);
    final Matcher m = p.matcher(input);
    if (m.matches()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
    }

0
投票

正则表达式:(?:> Raw Message: |\|)?(?:\d+=|[ ,<|]+)

细节:

  • (?:> Raw Message: |\|)?非捕获组(?:)匹配> Raw Message:|\|如果他们存在?
  • (?:\d+=|[ ,<|]+)非捕获组(?:)匹配数字一次或无限次\d+|匹配列表中的单个字符[ ,<|]+一次或无限次+

Java代码:

String test = "15:10:10,408 INFO <NioProcessor-11> Raw Message: 8=FIXT.1.1|9=317|35=D|49=verifix|";
String[] data =test.split("(?:> Raw Message: |\\|)?(?:\\d+=|[ ,<|]+)");
for(String r : data) {
    System.out.println(r);
}

输出:

15:10:10
408
INFO
NioProcessor-11
FIXT.1.1
317
D
verifix

Code demo

© www.soinside.com 2019 - 2024. All rights reserved.