Какое регулярное выражение для удаления пробелов внутри скобок?

#java #regex

#java #регулярное выражение

Вопрос:

Я пишу программу на Java для приема запросов. Если у меня есть запрос типа

 insert    
into  
abc      values   (    e   
, b    );
  

…какое регулярное выражение я могу использовать для преобразования этого в:

 insert into abc values(e,b);
  

…или:

 insert:into:abc:values(e,b);
  

На самом деле я хочу знать, как я могу написать регулярное выражение для удаления пробелов только в скобках.

Комментарии:

1. Могут ли быть вложены скобки? Если это так, вы облажались (мастер Perl может справиться с этим, но результат не будет приятным или ремонтопригодным, и я бы не стал делать ставку на то, что он будет переносим на менее сложные движки регулярных выражений).

2. Давайте сделаем это просто. Что нет вложенных скобок.

3. Это не совсем решение вашей проблемы, поскольку у вас уже есть несколько отличных ответов выше, но, если вы когда-нибудь остановитесь перед чем-то подобным, я нахожу, что в Интернете есть отличные тестировщики — я использую этот чаще всего, поскольку он работает в режиме реального времени и имеет хороший справочный лист с правой стороны.

Ответ №1:

Предполагая правильно сбалансированные круглые скобки и отсутствие вложенных круглых скобок, следующее удалит все пробелы внутри круглых скобок (и только там):

 String resultString = subjectString.replaceAll("\s (?=[^()]*\))", "");
  

Это трансформирует

 insert    
into  
abc      values   (    e   
, b    );
  

в

 insert    
into  
abc      values   (e,b);
  

Объяснение:

 s       # Match whitespace
(?=      # only if followed by...
 [^()]*  # any number of characters except parentheses
 )      # and a closing parenthesis
)        # End of lookahead assertion
  

Комментарии:

1. Идеальный вариант. Большое спасибо. Я снова буду использовать replaceAll(«\s «,»:»); чтобы получить результат и выполнить запрос

Ответ №2:

Насколько я вижу, вам не нужно регулярное выражение для этого. Это должно сработать:

 yourString.replaceAll("n", " ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(", ",",").replaceAll(" ,",",");
  

Комментарии:

1. Это не решение. Что касается следующей строки, она не будет работать, где ( e , b ) ; может содержать несколько пробелов.

2. Для первой строки, которую он опубликовал, мое решение сработало. Но он отредактировал свой пример строки.