2015-02-06 335 views
0

我面临两个逗号问题: 1 - 我想用相同的模式搜索DE 99,SF 99和DE 99 SF 99。请注意唯一的区别就是逗号。我有一个数据元素编号(DE)和其子域编号(SF)的输入。 SF不是总是存在,但我设法在下面的代码中处理。问题是有些时候DE和SF会被“”分隔开,而其他时候则不会。 2 - 其他问题,货币值或带有“,”的任何值在逗号后错过。我放在我正在做的和一些测试案例的例子下面。请注意,该值可以是数字或字母数字。正则表达式 - 用逗号分隔

Found and read correctly the value 
wholeLine: DE 3, SF 1 = 20 
OUTPUT: DE 3, SF 1 = 20 

Found and read correctly the value 
wholeLine: DE 26 = 6538 
OUTPUT: DE 26 = 6538 

Found but read wrongly the value because only reads before “,” 
wholeLine: DE 4 = 3,727 
OUTPUT: DE 4 = 3 

Not Found 
wholeLine: DE 63 SF 2 = xyz 

Pattern patternDE = Pattern.compile("DE \\d+(, SF \\d+)* = \\w+"); 
Matcher matcherDE = patternDE.matcher(wholeLine); 

while (matcherDE.find()){ 
    String wholeThing = matcherDE.group(); 
    System.out.println(wholeThing); 
} 

回答

1

看起来你应该使用

DE \\d+,?(SF \\d+)* = \\w+ 

?one or none一个量词,所以你要找DE后面有一个空格,然后一个或多个数字,然后是一个或零个逗号,其次是正在工作的其他正则表达式。

您输出的最后一部分存在的问题是您匹配单词字符,其中不包含逗号。尝试匹配的非空格代替\\S

1
  1. 部分(, SF \\d+)*充当组,无法告诉逗号,是否存在单独。因此,通过将,移出组,表达式应该可以。
  2. 而对于货币问题,请尝试用[\w,]+代替\\w+,以包含逗号。

    DE \\d+(, SF \\d+)* = \\w+ //原始

    DE \\d+,?(SF \\d+)* = \\w+ //从组中排除逗号

    DE \\d+,?(SF \\d+)* = \[\w,]+ //货币隔板

相关问题