2017-07-14 7 views
1

正規表現を使用して文字列からユーロ単位の金額を抽出します。ユーロ金額を抽出するJava正規表現

現在、私は5しか得ておらず、私のエラーを理解することはできません。文字列に17,05 Euro85 EURなどの亜種も検出するのに適したソリューションはどのようにありますか?

String regExp = ".*([0-9]+([\\,\\.]*[0-9]{1,})?) *[Eu][Uu][Rr][Oo]? .*"; 
    Pattern pattern = Pattern.compile(regExp); 

    String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa"; 
    Matcher matcher = pattern.matcher(input1); 
    matcher.matches(); 
    System.out.println(matcher.group(1)); 

結果:最初の.*貪欲で、最初に全体のラインをつかむため

5

+0

[こちら](https://stackoverflow.com/a/37571199/2064981)をご確認ください。あなたに役立つかもしれません;)[regex101](https://regex101.com/r/kL8pD9/7)が変更されました。 – ClasG

+0

'。*?' '貪欲ではなく、' [] 'の '、.'をエスケープする必要はありません –

答えて

3

あなただけ5を取得し、その後のサブパターンが一致するまで、文字によって得た文字をバックトラック。そのため、あなたのパターンで必要とされるのは1つだけなので、最後の数字はキャプチャされます。 - 大文字小文字を区別しない修飾子([eE][Uu]を記述する必要はありません...)

  • ([0-9]+(?:[.,][0-9]+)?) - グループ

    String regExp = "(?i)([0-9]+(?:[.,][0-9]+)?)\\s*euro?"; 
    Pattern pattern = Pattern.compile(regExp); 
    String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa"; 
    Matcher matcher = pattern.matcher(input1); 
    if (matcher.find()) { 
        System.out.println(matcher.group(1)); 
    } 
    

    Java demo

    • (?i)を参照してください:

      あなたはMatcher#findとシンプルなパターンを使用することができます1:

      • [0-9]+から1桁以上
      • (?:[.,][0-9]+)?
      • - の任意の配列:
        • [.,] - リテラル.又は,シンボル
        • [0-9]+から1桁以上
    • \\s* - 0 +空白
    • euro? - eurまたはeuro部分文字列。テキストがよく書かれている場合

    あなたも、数字を一致させるために[0-9]+(?:[.,][0-9]+)?[0-9][.,0-9]*にサブパターンを減らすことが0+桁、.または,と続きます。

  • 1

    は交換してください:

    String regExp = ".*([0-9]+([\\,\\.]*[0-9]{1,})?) *[Eu][Uu][Rr][Oo]? .*"; 
    Pattern pattern = Pattern.compile(regExp); 
    
    String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa"; 
    Matcher matcher = pattern.matcher(input1); 
    matcher.matches(); 
    System.out.println(matcher.group(1)); 
    

    で:

    String regExp = "(?i)\\d*\\.*,*\\d*\\s(euro?)"; 
    Pattern pattern = Pattern.compile(regExp); 
    String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa"; 
    Matcher matcher = pattern.matcher(input1); 
    if(matcher.find()) { 
        System.out.println(matcher.group(0)); 
    
    } 
    

    これは、あなたが提供変種のために働きます。