2016-04-24 24 views
1

私のプログラムで正規表現を使ってマッチングしている文字列を解析できないAndroidスタジオでこの奇妙な問題が発生しています。regex101で正しい文字列でも文字列が一致しません

private Pattern myPattern = Pattern.compile("([Request ID:]+)(\\d+)([, BY:]+)(\\d+)([ ])([A-Z\\d ]+)([ ])([amount:]+)(\\d+(\\.\\d{1,2}))"); 

    msg = "Request ID:22, BY:123414045601 DEALER01 amount:100.00 | Request ID:41, BY:123414DEALER01 amount:100.00 | Request ID:2, BY:123414032110 DEALER MAKER5 amount:500.00"; 

    String[] items = msg.split("\\|"); 
    for(int i = 0; i <items.length; i++){ 

     Matcher match = pendingPattern.matcher(items[i]); 
     if (!match.matches()) { 

     } else { 

      list1.add(match.group(2)); 
      list2.add(match.group(4)); 
      list3.add(match.group(9)); 
     } 
    } 

私の正規表現の一致 "リクエストID:2、BY:123414032110ディーラーMAKER5量:500.00" が、他のエントリと一致doesntの。私はすでにregex101.comでこれをチェックしており、そこにあるすべてのエントリが一致しています。

これについての洞察は非常に高く評価されます。

答えて

1

あなたの入力に|の前後のスペースがあるためです。

あなたは好きで、それを取り除くためにString.trim()を使用することができます。

Matcher match = pendingPattern.matcher(items[i].trim()); 

それとも他にはスペースがスプリットでこの正規表現を使用することにより、分割配列に表示させてはいけない:

String[] items = msg.split("\\s*\\|\\s*"); 
+1

はどうもありがとうございました!これは私の問題を解決しました。私は白いスペースがそのような影響を持っているとは思わなかった。 – Strauss

関連する問題