正则表达式,以避免分裂特殊字符

时间:2016-04-27 18:28:50

标签: java regex

我要求在像AND,OR,NOT,&,|,!,(,).

这样的关键字上拆分字符串

有一些特殊情况,如果任何paenthesis '(' or ')'出现在单词或括号中间,并且在单词的中间出现特殊字符,我就不想拆分单词。我想要分裂任何特殊字符。我也不想分开空格。

如果括号出现在单词的单词或单词的开头,那么只有我必须分开。

例如:

我的逻辑如下。

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";

str = str.replaceAll("\\s*\\(\\s*", "(");

str = str.replaceAll("\\s*\\)\\s*", ")");

str = str.replaceAll("and\\(", " and (");

str = str.replaceAll("\\)and", ") and ");

String[] splitArray= str.toUpperCase().split(("((?<=\\bOR\\b|\\bAND\\b|\\bNOT\\b)|(?=\\bOR\\b|\\bAND\\b|\\bNOT\\b))|((?<=(^| )\\(+)+\\b+)|(\\b(?=\\)($| )))"));

分割输出我从splitArray得到的是:

(((

TOM

AND

JERRAY)

AND

MIC(#*EY

AND,

MINEY))

但我希望输出为:

(((

TOM

AND

JERRAY

**)**

AND

MIC(#*EY

AND,

MINEY

**))**

我编写的代码不是拆分闭括号。我也想拆分它。任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";

String[] splitArray= str.toUpperCase().split(("AND|OR|(\\()+\\(|\\)(\\s|\\))+|\\)^(.)|^(.)\\("));

答案 1 :(得分:0)

编辑:修改模式以分割and,而不是空格。

你正在寻找这个吗?

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";
String[] splitArray= str.toUpperCase().split("(?i)(?<=\\()()(?=\\w)|(?<=\\w+)()(?=\\))|()(?=and)|(?<=and)()");

输出:

enter image description here