Я хочу:
удалить все пробелы, если только это не до или после (0-1 пробел до и 0-1 после) предопределенных ключевых слов (например, и, или, если затем мы оставляем пробелы в «и» или «и» или «и» без изменений)
игнорируем все между кавычками
Iперепробовал много шаблонов. Самое близкое, что я придумал, это довольно близко, но оно все равно удаляет пробел после ключевых слов, которых я стараюсь избегать.
regex:
\s(?!and|or|if)(?=(?:[^"]*"[^"]*")*[^"]*$)
Test String:
if (ans(this) >= ans({1,2}) and (cond({3,4}) or ans(this) <= ans({5,6})), 7, 8) and {111} > {222} or ans(this) = "hello my friend and or " and(cond({1,2}) $1 123
Идеальный результат:
if (ans(this)>=ans({1,2}) and (cond({3,4}) or ans(this)<=ans({5,6})),7,8) and {111}>{222} or ans(this)="hello my friend and or " and(cond({1,2})$1123
Затем я могу использовать str = str.replaceAll
в Java для удаления этих пробелов. Я не против сделать несколько шагов, чтобы получить результат, но я не знаком с регулярным выражением, так что вроде бы застрял.
любая помощь будет признательна!
Примечание: я отредактировал результат. Прости за это. Для пробела вокруг ключевых слов: уменьшите до 1, если есть пробелы. Либо оставьте его, либо добавьте 1 пробел, если он равен 0 (я просто не хочу ", или ans" становится "orans", но "and (cond" становится "и (cond)" нормально (уменьшите до 1 пробела до и 1 пробела)после, если существует). Игнорировать все между кавычками.