【问题标题】:How to get integers from a specific string using regexp?如何使用正则表达式从特定字符串中获取整数?
【发布时间】:2022-01-11 09:17:49
【问题描述】:

我有一些示例文本

# HELP aaasd asdads
# TYPE ASDA dasdas
goodmetric_total{"camel-1"} 777.0
# HELP qqq www
# TYPE eee rrr
badmetric_total{"camel-1"} 888.0

我需要从特定字符串中获取数字。使用 String.format,我将替换我需要的值。例如goodmetric_total。

如何编写正则表达式以仅获取数值? 目前,我有先搜索字符串的解决方案。

^goodmetric.+\d+

并且已经在这一行中寻找数字。

我认为您可以在一次操作中完成所有这些操作。 谢谢!

【问题讨论】:

  • 你的意思是你需要得到777.0或777.0和1?来自goodmetric_total{"camel-1"} 777.0?
  • @WiktorStribiżew 对不起。我只需要得到像 777 这样的值
  • 然后您可以使用非正则表达式方法,或者具有类似于^goodmetric.+ (\d+)(?:\.0)?$ (demo) 的模式的正则表达式方法(将数字的 int 部分捕获到第 1 组中)。
  • @WiktorStribiżew 谢谢!
  • 为什么不直接使用String#split() 方法呢? String value=""; if (line.trim().startsWith("goodmetric_total")) { value = line.split("\\s+")[1]; }.

标签: java regex


【解决方案1】:

您可以使用正则表达式方法

(?m)^goodmetric.*\h(\d+)(?:\.0+)?$

请参阅regex demo。 详情:

  • (?m)^ - 行首
  • goodmetric - 一个字符串
  • .* - 除换行符之外的任何零个或多个字符,尽可能多
  • \h - 水平空格
  • (\d+) - 第 1 组:一位或多位数字
  • (?:\.0+)? - . 和一个或多个 0 字符的可选序列
  • $ - 行尾(由于 (?m) 修饰符 = Pattern.MULTILINE)。

见Java demo:

String s = "# HELP aaasd asdads\n# TYPE ASDA dasdas\ngoodmetric_total{\"camel-1\"} 777.0\n# HELP qqq www\n# TYPE eee rrr\nbadmetric_total{\"camel-1\"} 888.0";
Pattern pattern = Pattern.compile("^goodmetric.*\\h(\\d+)(?:\\.0+)?$", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

【讨论】:

  • 非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2023-01-17
相关资源
最近更新 更多