正则表达式 - 字符串匹配错误输出

时间:2013-11-12 13:39:06

标签: java regex

我的字符串是:

04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.369 05/31/13 INCOME REINVEST 0.0228 $22.99 $12.22 1.881 1,010.250 06/28/13 INCOME REINVEST 0.0224 $22.63 $11.97 1.891 1,012.141

我的正则表达式是:

([0-9]{2}/[0-9]{2}/[0-9]{2})\\s*([\\w ]+).+?\\$((?:(?:\\d+|\\d+,\\d+)\\.\\d+\\s\\$?){3})

我的预期输出来自3组:

04/30/13 INCOME REINVEST 24.66 $12.34 1.998

第一场比赛。但我明白了:

04/30/13 INCOME REINVEST 0 24.66 $12.34 1.998

为什么我在匹配的第二组中获得额外的0

2 个答案:

答案 0 :(得分:0)

问题是\w匹配单词字符,数字是单词字符,因此[\w ]+将匹配INCOME REINVEST 0。它停在点上,因为点不是单词字符(\w被定义为[a-zA-Z0-9_]的快捷方式。)

您需要使用其他课程,例如[a-zA-Z_ ]代替[\w ]。 (为了获得更大的灵活性,你也可以使用它:[\p{L}\s],意思是“任何字母或空格”)

答案 1 :(得分:0)

split()怎么样?

String s = "04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.369 05/31/13 INCOME REINVEST 0.0228 $22.99 $12.22 1.881 1,010.250 06/28/13 INCOME REINVEST 0.0224 $22.63 $11.97 1.891 1,012.141";

String[] words = s.split("\\s+");
System.out.println(words[0]); // 04/30/13
System.out.println(words[1]); // INCOME
System.out.println(words[2]); // REINVEST
System.out.println(words[4]); // $24.66
System.out.println(words[5]); // $12.34
System.out.println(words[6]); // 1.998