如何使用Regex提取日志中[ DevStatusReq ] =后的子字符串?
用正则表达式从日志中提取指定字段值
我来分享下针对这个日志提取需求的实现方案,刚好可以用正则表达式精准拿到目标内容:
需求场景
目标日志行示例:
10-01-2018 10:24:08.006 : |=> [ DevStatusReq ] = 0x06
需要提取[ DevStatusReq ] =之后的子字符串(这里就是0x06)
实现代码
// 提取Margin字段(作为参考示例) String margin = LogExtract.extractDataInFile(path, "Margin", "Margin = (.*?) dB"); // 提取DevStatusReq字段的目标值 String devStatusReq = LogExtract.extractDataInFile(path, "DevStatusReq", "\\[ DevStatusReq \\] = (.*)"); System.out.println("Margin : " + margin + " | DevStatusReq : " + devStatusReq );
正则说明与注意事项
- 正则
\\[ DevStatusReq \\] = (.*)的关键点:\\[和\\]:因为方括号[和]是正则的特殊元字符(用于定义字符组),所以必须用反斜杠转义(Java字符串中需要写两个反斜杠),才能匹配日志里的字面方括号。(.*):捕获组,用来匹配并提取=之后的所有内容,直到行尾(如果日志行末尾没有多余空白,这个写法就足够精准)。
- 如果你的日志里
=后面的内容和行尾之间有空格,可以调整正则为\\[ DevStatusReq \\] = (.*?)\\s*$,避免提取到多余的空白字符。
这个实现依赖LogExtract.extractDataInFile方法完成文件读取和正则匹配,只要该方法能正确返回正则捕获组的内容,就能顺利拿到我们需要的字段值。
内容的提问来源于stack exchange,提问作者Ilan
相关产品推荐
相关产品推荐

