我试图分割一个如下所示的日志行:
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
拆分中的每个信息。
我试图用仅具有
的分割功能将其拆分 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
并做一个子串。它起作用,但并不完美,因为有时候第二次拆分更长或更短,并且看起来不是一个好的解决方案。
我想知道是否有可能实际上用正则表达式分割该字符串。我是正则表达式的新手,我没有找到一种方法来编写一个能够处理我的目标的表达式。
答案 0 :(得分:1)
(?:> [^:]+: |\d+=|[ ,|<>])+
(?:)+
一次或多次匹配以下任何选项
> [^:]+:
匹配>
,然后匹配:
以外的任何字符中的一个或多个,然后:
\d+=
匹配一个或多个数字,然后=
[ ,|<>]
匹配集合中的任何字符结果:
15:10:10
408
INFO
NioProcessor-11
FIXT.1.1
317
D
verifix
答案 1 :(得分: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);
但如果您想获取指定的元素,请使用组和特定模式。
答案 2 :(得分:0)
正则表达式:(?:> Raw Message: |\|)?(?:\d+=|[ ,<|]+)
详细说明:
(?:> Raw Message: |\|)?
非捕获论坛(?:)
匹配> Raw Message:
或 |
管道\|
如果存在?
(?:\d+=|[ ,<|]+)
非捕获群组(?:)
匹配数字一次或无限次\d+
或 |
匹配列表中的单个字符{ {1}}一次或无限次[ ,<|]+
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);
}
答案 3 :(得分:0)
@alaaeddine zammel更具体
{'1':'3',
'111':'333',
'11':'33'}