使用Java在文本输入流中匹配条件正则表达式组,忽略格式错误的行
通过与a的练习,我发现以下模式能够匹配我感兴趣的组: 我试着用如下方式“Java化”它:使用Java在文本输入流中匹配条件正则表达式组,忽略格式错误的行,java,regex,Java,Regex,通过与a的练习,我发现以下模式能够匹配我感兴趣的组: 我试着用如下方式“Java化”它:Pattern.compile((a-zA-Z)(\t)(0-9)”,不确定这是否正确。。。但稍后会有更多关于这方面的内容 我的输入流如下所示: for (String k : debugOutput) { Pattern pattern = Pattern.compile("(a-zA-Z)( \t)(0-9)"); Matcher matcher = pattern.matcher(k)
Pattern.compile((a-zA-Z)(\t)(0-9)”代码>,不确定这是否正确。。。但稍后会有更多关于这方面的内容
我的输入流如下所示:
for (String k : debugOutput) {
Pattern pattern = Pattern.compile("(a-zA-Z)( \t)(0-9)");
Matcher matcher = pattern.matcher(k);
while (matcher.find()) {
System.out.println("group 1: " + matcher.group(1));
System.out.println("group 2: " + matcher.group(2));
System.out.println("group 3: " + matcher.group(3));
}
}
日志####
慰问:
makePush 2196
makePush 638
makePush 470
opAdd 8342
opAdd 288
opStop 133
0x
调试:
####痕迹####
PUSH32 pc=00000000燃气=1000000000成本=3
PUSH32 pc=00000033气体=99999997成本=3
堆栈:
00000000 0000000000000000000000000000000000000000000000000000000000000005
PUSH32 pc=00000066气体=99999994 4成本=3
堆栈:
00000000 0000000000000000000000000000000000000000000000000000000000000005
00000001 0000000000000000000000000000000000000000000000000000000000000005
添加pc=00000099气体=99999991成本=3
堆栈:
00000000 0000000000000000000000000000000000000000000000000000000000000005
00000001 0000000000000000000000000000000000000000000000000000000000000005
00000002 0000000000000000000000000000000000000000000000000000000000000005
添加pc=00000100气体=99999988成本=3
堆栈:
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a
00000001 0000000000000000000000000000000000000000000000000000000000000005
停止pc=00000101气体=99999985成本=0
堆栈:
000000000000000000000000000000000000000000000000000000000000000000000000000000000 F
因此,我不仅要匹配大空格前后的两行不同部分(实际上是三个连续的制表符),而且还要忽略不符合该模式的每一行,即“一些字母字符”
,“大空格”
,“几个数字”
”
我试着这样做:
for (String k : debugOutput) {
Pattern pattern = Pattern.compile("(a-zA-Z)( \t)(0-9)");
Matcher matcher = pattern.matcher(k);
while (matcher.find()) {
System.out.println("group 1: " + matcher.group(1));
System.out.println("group 2: " + matcher.group(2));
System.out.println("group 3: " + matcher.group(3));
}
}
但这是行不通的——它不会选择我想要的群体,也不会忽略我试图避免的台词 将模式更改为:
Pattern pattern = Pattern.compile("([a-zA-Z]+)(\\s+)([0-9]+)");
那么如果输入行等于
String input = "makePush 2196";
它打印
1组:makePush
第2组:
第3组:2196
它会忽略其他行?@s.matthew.english是的,因为它们与模式不匹配。我不知道为什么-但对我来说这不起作用-它甚至不会根据条件输入循环matcher@s.matthew.english在你分享的要点中,模式与我的不同。您缺少+
符号。不-我在那里有-我只是拿出来做一些实验-当我测试它时-它在那里,这只是完整的文件-用于上下文,所以一旦您在图案部分显示更多的代码,可以吗?你怎么读这个文件?这有点复杂,因为这是hadoop的工作