Java Regex для удаления нежелательных символов из строки, кроме символов в двойных кавычках - PullRequest
0 голосов
/ 28 сентября 2019

У нас есть строка JAVA как

String str = "WHERE geoAreaName=\"Barcelona (Spain) EUR\" AND (startDate=\"2019-01-01\" AND  endDate=\"2020-01-01\")";

. Нам нужно удалить из нее такие символы, как [ , ], ( , ), { , }.

Шаблон регулярного выражения, идентифицирующий это: [\\[\\](){}]

Таким образом, при выполнении кода ниже, вывод:

System.out.println(str.replaceAll("[\\[\\](){}]" , ""));

>>> WHERE geoAreaName="Barcelona Spain EUR" AND startDate="2019-01-01" AND endDate="2020-01-01"

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

Barcelona (Spain) EUR needsбыть неповрежденным и не преобразованным в Barcelona Spain EUR

Ожидаемый результат:

WHERE geoAreaName="Barcelona (Spain) EUR" AND startDate="2019-01-01" AND endDate="2020-01-01"

Итак, в двух словах, мне нужно регулярное выражение, которое будет идентифицировать символы в данной строке, за исключениемчасти, которые в кавычках.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 сентября 2019

Я не знаю, почему вы хотите удалить скобки из вашего предложения WHERE вне строковых литералов.Они лишние, но нет ничего плохого в том, что они там.Однако у вас есть другая проблема, а именно то, что вы используете двойные кавычки для строковых литералов и литералов даты, когда вы должны использовать одинарные кавычки.Поэтому я на самом деле предлагаю следующую замену:

String where = "WHERE geoAreaName=\"Barcelona (Spain) EUR\" AND (startDate=\"2019-01-01\" AND  endDate=\"2020-01-01\")";
where = where.replaceAll("\"", "'");

Полученное предложение WHERE совершенно корректно и должно работать так, как вы ожидаете:

WHERE
    geoAreaName = 'Barcelona (Spain) EUR' AND
    (startDate = '2019-01-01' AND  endDate = '2020-01-01')
...