14

Java正規表現を使用して括弧を削除したいのですが、エラーが発生しNo group 1ました。私のコードを見て助けてください。

public String find_parenthesis(String Expr){
        String s;
        String ss;
        Pattern p = Pattern.compile("\\(.+?\\)");
        Matcher m = p.matcher(Expr);
        if(m.find()){
            s = m.group(1);
            ss = "("+s+")";
            Expr = Expr.replaceAll(ss, s);
            return find_parenthesis(Expr);
        }
        else
            return Expr;
    }

それが私のメインです:

public static void main(String args[]){
    Calculator c1 = new Calculator();
    String s = "(4+5)+6";
    System.out.println(s);
    s = c1.find_parenthesis(s);
    System.out.println(s);
}
4

6 に答える 6

34

最も簡単な方法は、バランスが取れているかどうかに関係なく、文字列からすべての括弧を削除することです。

String replaced = "(4+5)+6".replaceAll("[()]", "");

バランシングを正しく処理するには、解析が必要です (または、限られた深さにしか一致しない真に醜い RE、または正規表現の置換を繰り返す「賢さ」)。ほとんどの場合、このような複雑さはやり過ぎです。おそらく機能する最も単純なもので十分です。

于 2013-03-31T11:30:33.250 に答える
4

正規表現にグループがないため、エラーが発生していますが、このはるかに単純な 1 行のアプローチを使用することをお勧めします。

expr = expr.replaceAll("\\((.+?)\\)", "$1");
于 2013-03-31T11:21:31.277 に答える
1

正規表現は、任意の空白文字 (\s、文字列を渡すため \s としてエスケープされる)、ダッシュ (ダッシュは文字クラスのコンテキストで特別なものを意味するためエスケープされる)、および括弧。動作するコードを試してください。

phoneNumber.replaceAll("[\\s\\-()]", "");
于 2013-08-14T10:09:07.183 に答える
0

私はここで非常に遅れていることを知っています。ただし、より良い答えをまだ探している場合に備えて。文字列から開き括弧と閉じ括弧の両方を削除したい場合は、次のような非常に簡単な方法を使用できます。

String s = "(4+5)+6";
s=s.replaceAll("\\(", "").replaceAll("\\)","");

これを使用している場合:

s=s.replaceAll("()", "");

()文字列に存在しないものを探すようにコードに指示しています。代わりに、括弧を個別に削除するようにしてください。

詳細を説明するには、次のコードを検討してください。

String s = "(4+5)+6";
String s1=s.replaceAll("\\(", "").replaceAll("\\)",""); 
System.out.println(s1);
String s2 = s.replaceAll("()", "");
System.out.println(s2);

このコードの出力は次のようになります。

4+5+6

(4+5)+6

また、replaceAllが必要な場合にのみ使用してくださいregex。それ以外の場合は、replace問題なく動作します。下記参照:

String s = "(4+5)+6";
String s1=s.replace("(", "").replace(")","");

出力:

4+5+6

お役に立てれば!

于 2015-10-08T10:00:12.327 に答える