所以我对正则表达式有点陌生,需要一些帮助。我动态生成了输入字符串,其示例是:
(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)
所以我想知道是否有人可以帮助我解决这个问题。提前致谢..
你可以尝试这样做,但是案件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在单词边界处。
第四个替换=,如果它不是==、!=、<=或 的一部分>=(否定前瞻和否定前瞻)。
第五次替补<>(一场简单的比赛)。
第六和第七使==, !=, &, (,)和|被空格包围,但不在字符串的开头或结尾添加空格。&除非紧接在 或 之前或之后,否则它们只会被替换|。
我只对大写字母这样做。如果您还必须处理小写字母,您可以轻松适应。