首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Regex匹配文本行

使用Regex匹配文本行
EN

Stack Overflow用户
提问于 2016-01-01 11:15:17
回答 3查看 79关注 0票数 3

我有这样的台词:

代码语言:javascript
复制
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之后得到所有的数字。我想要的是这样一个数组:

代码语言:javascript
复制
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

到目前为止,我尝试过的(它只适用于第一行):

代码语言:javascript
复制
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新手,尝试了一些模式,但没有帮助。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-01 11:33:44

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

代码语言:javascript
复制
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));
          } 
    }

}
票数 2
EN

Stack Overflow用户

发布于 2016-01-01 11:39:50

如果您想使用拆分函数,也可以这样做-

代码语言:javascript
复制
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);
        }
票数 0
EN

Stack Overflow用户

发布于 2016-01-01 11:44:16

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

代码语言:javascript
复制
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);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34555642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档