使用正则表达式替换字符串中的特定字符

Phi*_*lip 5 java regex

所以我对正则表达式有点陌生,需要一些帮助。我动态生成了输入字符串,其示例是:

(ACTOR > 0OR(PROC <> NULL AND REVIEW=NULL ANDFERDINAND = NAME ) )
Run Code Online (Sandbox Code Playgroud)

现在我必须替换ORwith |ANDwith &=with==<>with !=,并在没有它们的字符之间提供一个空格。

通常我可以用来string.replace()这样做。但是,由于该语句可以带有或不带有空格,甚至因为AND可以以其他方式出现,如 的情况FERDINAND,我发现它有点困难。

预期结果:

( ACTOR > 0 | ( PROC != NULL & REVIEW == NULL & FERDINAND == NAME ) )
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有人可以帮助我解决这个问题。提前致谢..

Don*_*nat 0

你可以尝试这样做,但是案件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
Run Code Online (Sandbox Code Playgroud)

首先分隔一个数字,后跟一个单词字符(正向向前看)。

第二个第三个替换AND以及OR在单词边界处。

第四个替换=,如果它不是==!=<=或 的一部分>=(否定前瞻和否定前瞻)。

第五次替补<>(一场简单的比赛)。

第六和第七使==, !=, &, (,)|被空格包围,但不在字符串的开头或结尾添加空格。&除非紧接在 或 之前或之后,否则它们只会被替换|

我只对大写字母这样做。如果您还必须处理小写字母,您可以轻松适应。