java - Java正则表达式从日志文件中获取子指标
问题描述
我正在尝试从包含数千行的日志中获取子指标。这些线不相似,所以我需要在获取子度量之前匹配一些值。
一些简化的示例行
1, 2, acceptline,x,111, 100, , , 20, 20, end
1, 2, declineline,x,x, 100, 20, , end
1, 2, 3, acceptline,x,x, 1000, , 40, end
我尝试在我的值匹配(接受行)之后获取第三个逗号分隔列中的数值。
在我的示例中,这些值是 100 和 1000,但它们基本上可以是任何数值
我已经通过以下 java 正则表达式成功地获得了正确的子度量值
^.*acceptline.+?((?<submetric>,.+?){3}),.*
但是在那个正则表达式中,我得到了子度量,<, 100>
或者那个数值是什么。现在我需要改进该正则表达式,以便在接受为子度量之前删除那些领先的 <, >。
解决方案
您可以使用
\bacceptline(?:,[^,]*){2},\s*(\d+)
如果数字可以是浮点数,请使用\d*\.?\d+
而不是\d+
.
请参阅正则表达式演示。详情:
\b
- 单词边界acceptline
- 一个字(?:,[^,]*){2}
- 出现两次逗号,然后出现零个或多个非逗号,
- 一个逗号\s*
- 零个或多个空格(\d+)
- 第 1 组:一位或多位数字。
查看Java 演示:
String string = "1, 2, acceptline,x,111, 100, , , 20, 20, end\n1, 2, declineline,x,x, 100, 20, , end\n1, 2, 3, acceptline,x,x, 1000, , 40, end";
String regex = "\\bacceptline(?:,[^,]*){2},\\s*(\\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
// => 100 and 1000
推荐阅读
- remote-desktop - How to change own password in a cascaded remote desktop session
- python - 使用 Python 进行密码验证
- java - 使用递归而不是循环打印嵌套数组中的元素
- graphql - 如何在 Shopify 中更新产品变体中的产品选项?
- python - 使用ffmpeg连接音频和视频文件而不编码
- windows - Windows 上的 pyenv - 不被识别为内部或外部命令
- java - 无法在 Kotlin 中启用数据绑定
- mysql - 加入表以获得唯一匹配
- browser - 有什么方法可以将文件夹与文件夹栏中的子文件夹和文件分开
- android - 安卓工作室 FLUTTER 上的真实 Iphone