我遇到逗号的两个问题: 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);
}
答案 0 :(得分:1)
看起来你应该使用
DE \\d+,?( SF \\d+)* = \\w+
?
是one or none
的量词,所以你要找DE
后跟一个空格,然后是一个或多个数字,然后是一个或零个逗号,其余是正在使用的正则表达式。
您在输出的最后一部分遇到的问题是,您是匹配单词字符,不包括逗号。尝试匹配非空格而不是\\S
答案 1 :(得分:1)
(, SF \\d+)*
充当群组,无法分别识别逗号,
是否存在。因此,通过将,
移出组,表达式应该没问题。 对于货币问题,请尝试将\\w+
替换为[\w,]+
,以包含逗号。
DE \\d+(, SF \\d+)* = \\w+
//原创
DE \\d+,?( SF \\d+)* = \\w+
//从群组中排除逗号
DE \\d+,?( SF \\d+)* = \[\w,]+
//货币分隔符