使用正则表达式

时间:2018-11-25 11:54:24

标签: java regex

因此,我是regex的新手,希望获得一些帮助。我已经动态生成了输入字符串,其中的一个示例是:

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

现在我必须OR替换|,用AND替换&,用=和{{1 }}和==,并在没有字符的字符之间提供空格。

通常我可以使用<>来做到这一点。但是,由于该语句可以带有空格也可以不带有空格,甚至因为!=也可以像string.replace()一样出现,所以我觉得有点困难。

预期结果:

AND

所以我想知道是否有人可以帮助我。在此先感谢。

1 个答案:

答案 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

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

在单词边界处第二个替代词ANDOR

第四替代物=(如果它不是==!=<=>=的一部分)(负向前看和负向前看)。

第五替补<>(一个简单的匹配)。

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

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