2016-12-21 4 views
3

通貨を1000セパレータまたは10進数の有無に合わせたい通貨を千円の有無にかかわらず一致させる正規表現

文字列の例

String part = "R4,491.25"; // must be able to match more ex : R12,550,000.60 

私が見つけた

if(part.matches("\\R\\d*[.,\\s\\d*]+")){ 
    System.out.println("C [" + part + "]"); 
} 

このRegex for number with decimals and thousand separatorPython regex to match currency with or without comma or decimal

を持っていますが、どちらも私は必要なものを達成していない何か。 regex101を使用してJavascrptで私の例がうまくいくようですhttps://regex101.com/r/rK2jMU/4

上記の要件を満たすために正規表現を改善または変更するにはどうすればよいですか?

ありがとうございます。

+3

'R'の前にエスケープバックスラッシュを削除する必要があります。 –

+0

私はそれを受け入れることができるように答えに入れてください。ありがとうございました –

答えて

2

正規表現は、改行(\RはJava 8正規表現の改行に一致します)と最初のシンボルとして一致します。

ので、修正が(それはしかし、空の整数部分を許可しません)あなたは別の、より正確な正規表現をしようとする場合があります

part.matches("R\\d*[.,\\s\\d*]+") 

次のようになります。ここでは

"R(?:\\d{1,3}(?:[\\s,]\\d{3})+|\\d+)(?:\\.\\d+)?" 

this regex demo fiddleです

+0

あなたの正確なものを使用してください。^R(?:\\ d {1,3}(?:[\\ s、] \\ d {3})+ | \\ d +)(?:\\。\\ d +)?$ –

+1

'String.matches'では、パターンがデフォルトでアンカーされているので(' '完全な文字列の一致が期待されます ')、'^'と' $ 'を追加する必要はありません。 –

+0

そのように修正します。それを知らなかった。 :)ありがとう –

関連する問題