正则表达式 - 逗号的困难

时间:2015-02-06 22:54:59

标签: regex

我遇到逗号的两个问题:  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);
}

2 个答案:

答案 0 :(得分:1)

看起来你应该使用

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

?one or none的量词,所以你要找DE后跟一个空格,然后是一个或多个数字,然后是一个或零个逗号,其余是正在使用的正则表达式。

您在输出的最后一部分遇到的问题是,您是匹配单词字符,不包括逗号。尝试匹配非空格而不是\\S

答案 1 :(得分:1)

  1. 部分(, SF \\d+)*充当群组,无法分别识别逗号,是否存在。因此,通过将,移出组,表达式应该没问题。
  2. 对于货币问题,请尝试将\\w+替换为[\w,]+,以包含逗号。

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

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

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