Удалить скобки из строки с помощью java regex
Я хочу удалить скобки, используя регулярное выражение 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);
}
Ответы
Ответ 1
Самый простой способ - просто удалить все круглые скобки из строки, независимо от того, сбалансированы они или нет.
String replaced = "(4+5)+6".replaceAll("[()]", "");
Правильная обработка балансировки требует синтаксического анализа (или действительно уродливых RE, которые соответствуют только ограниченной глубине или "умности" с повторными заменами регулярных выражений). В большинстве случаев такая сложность является чрезмерной; простейшая вещь, которая могла бы работать, достаточно хороша.
Ответ 2
Что вы хотите, так это: s = s.replaceAll("[()]","");
Подробнее о regex, посетите учебник по регулярному выражению.
Ответ 3
Вы получаете ошибку, потому что в вашем регулярном выражении нет групп, но я предлагаю вам использовать этот гораздо более простой однолинейный подход:
expr = expr.replaceAll("\\((.+?)\\)", "$1");
Ответ 4
Вы не можете сделать это с помощью регулярного выражения. Он не удалит совпадающие скобки, только первые левые и первые справа, а затем вы не сможете получить правильный результат из выражения. Вам нужен парсер для выражений. Посмотрите вокруг рекурсивных парсеров эспрессора спуска, алгоритма шунтирования Дэйкстры и т.д.
Ответ 5
Регулярное выражение определяет класс символов, состоящий из любого символа пробела (\ s, который экранируется как \s, потому что мы передаем строку), тире (экранировано, потому что тире означает что-то особенное в контексте символа классы) и круглые скобки. Попробуйте использовать его.
phoneNumber.replaceAll("[\\s\\-()]", "");
Ответ 6
Я знаю, что я очень поздно здесь. Но на всякий случай вы все еще ищете лучший ответ. Если вы хотите удалить как открытые, так и закрывающие скобки из строки, вы можете использовать очень простой способ:
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
Надеюсь, это поможет!