2017-08-09 3 views
2

は私が持っているstring怒鳴るよう:正規表現 - Androidの

2500 $ 5405€ 554668¢ 885486¥ :私はこの[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollarと怒鳴るの値を取得しています

dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar 

588525dollar

問題:しかし、私はこれらにする必要はありません$ € ¢ ¥ dollar。どのように私はこれらをトップ正規表現で削除できますか?ここで

は私の方法である:

private String getPrice(String caption) { 
    String pricePattern = "[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollar|[\\d,]+\\s*Euro"; 
    List<String> lstPrice = new ArrayList<>(); 
    Pattern rPrice = Pattern.compile(pricePattern); 
    Matcher mPrice = rPrice.matcher(caption); 
    while (mPrice.find()) { 
     lstPrice.add(mPrice.group()); 
    } 
    if (lstPrice.size() > 0) { 
     return lstPrice.get(0); 
    } 
    return ""; 
} 
+1

使用グループ '([\\ D、] +) 'とあなたの正規表現は同様に最適化することができます –

+0

おそらく私はこのような文字列を持っています:dsfsdfd58ssdf8745 $。それから私は58と8745を取得します。私は価格にする必要があります。 –

+0

私はちょうど価格が必要です。 –

答えて

1

あなたは、すべての価格を返し、あなたのgetPrice方法はList<String>を返すことを確認し、価格と一致しますが数字だけをキャプチャするために正規表現を調整する必要がある場合:

private List<String> getPrice(String caption) { 
    String pricePattern = "(?i)(\\d[\\d,]*)\\s*(?:[$€¥¢]|dollar|Euro)"; 
    List<String> lstPrice = new ArrayList<>(); 
    Pattern rPrice = Pattern.compile(pricePattern); 
    Matcher mPrice = rPrice.matcher(caption); 
    while (mPrice.find()) { 
     lstPrice.add(mPrice.group(1)); 
    } 
    return lstPrice; 
} 

Java demo onlineを参照してください。

String s = "dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar"; 
System.out.println(getPrice(s)); 

戻り

[2500, 5405, 554668, 885486, 588525] 

パターンが詳細:

  • (?i) - 大文字と小文字を区別しない修飾子(埋め込みフラグオプション)
  • (\\d[\\d,]*) - グループ1桁、次に0を取り込みます+数字または,
  • \\s* - 0+空白
  • (?:[$€¥¢]|dollar|Euro) - $¥¢dollar又はeuroいずれか(大文字小文字を区別しない検索が(?i)を介して有効になっている)
+1

@ WiktorStribiżew。あなたの反応は本当です。どうもありがとう 。 –

+0

この回答を受け入れる –

1

あなたはでReplaceAll

で試すことができます与えられた置換文字列で パターンとマッチする入力シーケンスの部分シーケンスを置き換えます。

String pricePattern="2500$ 5405€ 554668¢ 885486¥ 588525dollar"; 
pricePattern= pricePattern.replaceAll("[^\\d+]", " "); //2500 5405 554668 885486 588525 

チェックJava Demo

+0

あなたは、後処理について話していることを明記するべきです。私はTOがすぐに両方を行うように彼の正規表現を修正したいと思う。 – Nathan

+1

@ IntelliJ Amiya。あなたの反応は本当です。どうもありがとう 。 –

+0

このメソッドは、価格の一部ではない他の桁(年、時間など)も保持します。このメソッドは、入力文字列内に価格だけが存在し、他の桁がない場合には、いくつかのエッジケースで機能します。 –