我正在开展一个项目,我必须解析文本文件并从中获取相关信息以便以后使用。
我创建了一个正则表达式来匹配具有相关数据的文本行,但我不确定如何从行中提取相关信息并将其转储到新的文本文件中。
以下是我正在解析的文本文件中的示例:
[ 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天...... 任何和所有的帮助将不胜感激。
谢谢
答案 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)
使用FileReader / BufferedReader打开输入文件。
FileReader fr = new FileReader("input.txt");
BufferedReader br = new BufferedReader(fr);
使用FileWriter / BufferedWriter
打开输出文件FileWriter fw = new FileWriter("output.txt");
BufferedWriter bw = new BufferedWriter(fw);
使用Buffered reader将while loop
中的一行一行读入一个字符串
String lineString = null;
while((lineString= br.readLine())!= null){
//....
}
在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()){
//....
}
如果找到匹配项,请使用Buffered writer
在输出文件中写入字符串 bw.write(lineString);
关闭所有读者/作者。
bw.close();
fw.close();
br.close();
fr.close();
编辑:示例代码样式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将包含您文件中与正则表达式匹配的所有行