4
 Pattern[] a =new Pattern[2];
 a[0] = Pattern.compile("[$£€]?\\s*\\d*[\\.]?[pP]?\\d*\\d");
 a[1] = Pattern.compile("Rs[.]?\\s*[\\d,]*[.]?\\d*\\d");

例:Rs.150によって検出されa[1]150によって検出されa[0]ます。そのような交差点を削除して、によってのみ検出する方法はa[1]ありa[0]ますか?

4

3 に答える 3

0

初期テストを使用して式を切り替えます。この最初のテストがどれだけ速くてスマートかは、あなた次第です。

この場合、次のようなことができます。

if (input.startsWith("Rs.") && a[1].matcher(input).matches()) {
    return true;
}

テストを行うメソッドの前に配置します。

もちろん、最も一般的な正規表現を配列の前に置くだけでも効果があります。

于 2013-06-17T10:52:47.317 に答える
0

説明

否定的な先読みを使用してa[1] rs.150フォーマットを一致させ、同時にフォーマットを防止しa[0] 150ます。

ジェネリック式:(?! the a[0] regex goes here ) followed by the a[1] expression

基本的な正規表現ステートメント:(?![$£€]?\s*\d*[\.]?[pP]?\d*\d)Rs[.]?\s*[\d,]*[.]?\d*\d

Java用にエスケープ:(?![$£€]?\\s*\\d*[\\.]?[pP]?\\d*\\d)Rs[.]?\\s*[\\d,]*[.]?\\d*\\d

ここに画像の説明を入力

于 2013-06-17T13:58:12.637 に答える