如何将正则表达式的部分打印到.txt文件中

时间:2012-10-13 05:38:03

标签: java regex text-files expression

我正在开展一个项目,我必须解析文本文件并从中获取相关信息以便以后使用。

我创建了一个正则表达式来匹配具有相关数据的文本行,但我不确定如何从行中提取相关信息并将其转储到新的文本文件中。

以下是我正在解析的文本文件中的示例:

[  5] local 10.170.150.195 port 42507 connected with 184.72.63.139 port 5001
[  4] local 10.170.150.195 port 42506 connected with 184.72.63.139 port 500
[  1]  0.0- 1.0 sec  0.00 KBytes  50.00 Kbits/sec

在此样本中,相关信息为“0.0-1.0秒”和50.00 Kbits / sec。

这是我的正则表达式:

[  [0-6]]  0.0- 1.0 sec  0.00 KBytes  [0-9]*.[0-9][0-9] Kbits/sec

很抱歉,如果这是一个微不足道的问题,我对java很新......这是第3天...... 任何和所有的帮助将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用括号捕获所需的组,然后将这些组打印到输出。

    Pattern pattern = Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");

    String line = "[  1]  0.0- 1.0 sec  0.00 KBytes  50.00 Kbits/sec";
    Matcher matcher = pattern.matcher(line);
    if (matcher.matches()) {
        System.out.println(matcher.group(1) + "\t" + matcher.group(2));
    }

此处pattern对象是您的正则表达式,您可以将其重复用于所有行。对于每行文件,您创建一个新的matcher并将其传递给该行。然后,如果该行与正则表达式匹配,则打印捕获组。

答案 1 :(得分:0)

  1. 使用FileReader / BufferedReader打开输入文件。

    FileReader fr = new FileReader("input.txt");
    BufferedReader br = new BufferedReader(fr);
    
  2. 使用FileWriter / BufferedWriter

    打开输出文件
    FileWriter fw = new FileWriter("output.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    
  3. 使用Buffered reader将while loop中的一行一行读入一个字符串

    String lineString = null;
    while((lineString= br.readLine())!= null){
          //....
     }
    
  4. while loop中,将读取的字符串与正则表达式匹配

    Pattern pattern = 
    Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");
    Matcher matcher = pattern.matcher(lineString);
    if(matcher .matches()){
       //....
    }
    
  5. 如果找到匹配项,请使用Buffered writer

    在输出文件中写入字符串
        bw.write(lineString);
    
  6. 关闭所有读者/作者。

        bw.close();
        fw.close();
        br.close();
        fr.close();
    
  7. 编辑:示例代码样式1如下:

        String regex = "\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)";
        FileReader fr = new FileReader("input.txt");
        BufferedReader br = new BufferedReader(fr);
    
        FileWriter fw = new FileWriter("output.txt");
        BufferedWriter bw = new BufferedWriter(fw);
    
        String lineString = null;
        while((lineString= br.readLine())!= null && 
                      !lineString.equals("Starting Test 2: Iperf TCP East....")){
            if(lineString.matches(regex)){
                bw.write(lineString);
            }
        }
        bw.close();
        fw.close();
        br.close();
        fr.close();
    

    示例代码样式2如下:

     FileReader fr = new FileReader("input.txt");
     BufferedReader br = new BufferedReader(fr);
     FileWriter fw = new FileWriter("output.txt");
    
     BufferedWriter bw = new BufferedWriter(fw);
    
     Pattern pattern = 
        Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");
    
        String lineString = null;
        while((lineString= br.readLine())!= null && !lineString.equals("Starting Test 2: Iperf TCP East....")){
            Matcher matcher = pattern.matcher(lineString);
            if(matcher.matches()){
                bw.write(lineString);
            }
        }
        bw.close();
        fw.close();
        br.close();
        fr.close();
    

    一切顺利!

答案 2 :(得分:0)

如果你有权访问unix终端或grep,这一行命令应该可以解决问题。

grep "[ [0-6]] 0.0- 1.0 sec 0.00 KBytes [0-9]*.[0-9][0-9] Kbits/sec" yourfile > newfile.txt

newfile.txt将包含您文件中与正则表达式匹配的所有行