2015-02-06 214 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,]+ //貨幣隔板

相關問題