我的字符串是:
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
?
答案 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