繁体   English   中英

使用Regex匹配文本行

[英]Match text lines using Regex

我有这样的行:

36600.10: [Host #255] utilization is 0.00%
36600.10: [Host #256] utilization is 21.64%
36600.10: [Host #257] utilization is 3.29%
36600.10: [Host #258] utilization is 0.94%
36600.10: [Host #260] utilization is 3.76%
36600.10: [Host #260] utilization is 1.21%
36600.10: [Host #260] utilization is 86.09%
36600.10: [Host #260] utilization is 7.32%

我需要在utilization is后得到所有数字。 我想要的是这样的数组:

myArray[0] => 0.00,
myArray[1] => 21.64,
myArray[2] => 3.29,
myArray[3] => 0.94,
myArray[4] => 3.76,
myArray[5] => 1.21,
myArray[6] => 7.32

到目前为止我尝试了什么(它适用于第一行):

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class main {

    public static void main(String[] args) {
          String lines = "36600.10: [Host #256] utilization is 21.65% \n 36600.10: [Host #256] utilization is 91.78% \n 36600.10: [Host #256] utilization is 3.29%";
          String pattern = "(utilization is\\s)(\\d+\\.\\d*)(.*)";

          Pattern r = Pattern.compile(pattern);

          Matcher m = r.matcher(lines);
          if (m.find( )) {
             System.out.println(m.group(2));
          } else {
             System.out.println("NO MATCH");
          }

    }

}

对不起,我是java的新手,试过一些模式,但没有帮助。 任何帮助将不胜感激。

使用While循环。 If语句将限制第一次出现的匹配(正在​​发生)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class main {

    public static void main(String[] args) {
          String lines = "36600.10: [Host #256] utilization is 21.65% \n 36600.10: [Host #256] utilization is 91.78% \n 36600.10: [Host #256] utilization is 3.29%";
          String pattern = "(utilization is\\s)(\\d+\\.\\d*)(.*)";

          Pattern r = Pattern.compile(pattern);

          Matcher m = r.matcher(lines);
         while (m.find()) {
             System.out.println(m.group(2));
          } 
    }

}

您可以使用多个正则表达式。*并且......有几种解决方案。 其中之一是用空格替换冗余文本。 然后使用这些空格来分割字符串。 也就是说:

•代码:

String[] array = lines.replaceAll("(?m).*is\\s+|%\\s*", " ").trim().split("\\s+");
System.out.println(Arrays.toString(array));

•输出:

[0.00, 21.64, 3.29, 0.94, 3.76, 1.21, 86.09, 7.32]

────────────
*顺便说一句, Regular-Expressions.info - Regex教程,示例和参考 - Regexp Patterns是开始学习正则表达式的好地方。 掌握正则表达式,第3版是一本强烈推荐的书。

如果您愿意,也可以使用拆分功能执行此操作 -

String lines = "36600.10: [Host #256] utilization is 21.65% \n 36600.10: [Host #256] utilization is 91.78% \n 36600.10: [Host #256] utilization is 3.29%";
        String lineArray[] = lines.split("\n");
        for(String temp:lineArray){
            String percentWithSign = temp.split("utilization is")[1];
            String percentStr  = percentWithSign.replace("%", "");
            Float percentFloat = Float.parseFloat(percentStr);
            System.out.println(percentFloat);
        }

在看到输入模式后,至少在这种情况下也可以在没有正则表达式的情况下解决。

List<String> list = new ArrayList<String>();
        list.add("36600.10: [Host #255] utilization is 0.00%");
        list.add("36600.10: [Host #256] utilization is 21.64%");
        list.add("36600.10: [Host #255] utilization is 3.29%");
        for(int i=0 ; i<list.size() ; i++){
            String str = list.get(i);
            int start = str.lastIndexOf(" ");
            String temp = str.substring(start+1, str.length()-1);
            System.out.println(temp);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM