2

我的字符串是:

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 组中获得额外奖励?

4

2 回答 2

0

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

您需要使用另一个类,例如,[a-zA-Z_ ]而不是[\w ]. (为了获得更大的灵活性,您还可以使用它:[\p{L}\s]这意味着“任何字母或空格”)

于 2013-11-12T13:45:26.077 回答
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
于 2013-11-12T13:48:19.957 回答