Заменить определенные символы в строке с помощью регулярных выражений - PullRequest
0 голосов
/ 25 ноября 2018

Итак, я новичок в регулярных выражениях и мне нужна помощь.У меня есть динамически сгенерированные входные строки, пример которых:

(ACTOR > 0OR(PROC <> NULL AND REVIEW=NULL ANDFERDINAND = NAME ) )

Теперь мне нужно заменить OR на |, AND на &, = на== и <> с != и пробел между символами без них.

Обычно я мог бы использовать string.replace() для этого.Но, поскольку утверждение может идти с пробелами или без них, и даже поскольку AND может присутствовать в других словах, как в случае FERDINAND, я нахожу это немного сложным.

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

( ACTOR > 0 | ( PROC != NULL & REVIEW == NULL & FERDINAND == NAME ) )

Так что мне было интересно, может ли кто-нибудь помочь мне с этим.Заранее спасибо ..

1 Ответ

0 голосов
/ 25 ноября 2018

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

String str2 = str1
      .replaceAll("([0-9])(?=[A-Z])", "$1 ")                 //1
      .replaceAll("\\bAND\\b", "&")                          //2
      .replaceAll("\\bOR\\b", "|")                           //3
      .replaceAll("(?<![=<>!])=(?!=)", "==")                 //4
      .replaceAll("<>", "!=")                                //5
      .replaceAll("(?<=[^&| ])(==|!=|&|\\)|\\|)", " $1")     //6
      .replaceAll("(==|!=|&|\\(|\\)|\\|)(?=[^ &|])", "$1 "); //7

Сначала отделяйте число, за которым следует символ слова (положительный взгляд вперед).

Второйтретий заменитель AND и OR на границах слова.

четвертый заменитель =, если он не является частью ==, !=, <= или >= (негативный взгляддо и отрицательный взгляд вперед).

Пятая замена <> (одно простое совпадение).

Шестое и седьмое делают это ==, !=, &, (, ) и | окружены пробелами, но не добавляют пробелы в начале или конце строки.Они будут заменены только в том случае, если за ними непосредственно не предшествует или не следует & или |.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...