因此,我是regex的新手,希望获得一些帮助。我已经动态生成了输入字符串,其中的一个示例是:
(ACTOR > 0OR(PROC <> NULL AND REVIEW=NULL ANDFERDINAND = NAME ) )
现在我必须用OR
替换|
,用AND
替换&
,用=
和{{1 }}和==
,并在没有字符的字符之间提供空格。
通常我可以使用<>
来做到这一点。但是,由于该语句可以带有空格也可以不带有空格,甚至因为!=
也可以像string.replace()
一样出现,所以我觉得有点困难。
预期结果:
AND
所以我想知道是否有人可以帮助我。在此先感谢。
答案 0 :(得分: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
首先分隔一个数字,后跟一个单词字符(正向看)。
在单词边界处第二个替代词AND
和OR
。
第四替代物=
(如果它不是==
,!=
,<=
或>=
的一部分)(负向前看和负向前看)。
第五替补<>
(一个简单的匹配)。
第六和第七个使得==
,!=
,&
,(
,)
和|
被空白包围,但是不要在字符串的开头或结尾添加空格。除非紧接&
或|
之前或之后,否则它们只会被替换。
我只对大写字母这样做。如果还必须处理小写字母,则可以轻松适应。