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

问题描述:

我对分裂关键字串像AND,OR,NOT,&,|,!,(,).有要求正则表达式,以避免对特殊字符

有特殊情况,我不想如有paraenthesis '(' 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 

**))** 

代码我写的不是分裂关闭括号。我也想分开。谁能帮我这个 ?

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

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

但这正则表达式是不保留分离器。有什么办法可以保留这个吗? – Sameer

编辑:修改的图案分裂超过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

+0

上面的正则表达式也在空间上分裂。我不想在空间上分割它。你能避免在太空中分裂吗? – Sameer

+0

这与您在post中的所需输出冲突。如果您不想将其分散在空间中,则帖子中的输出不正确。它会是:'((('''TOM和JERRAY',')和MIC(#* EY AND MINEY'和'))'。 – Quinn

+0

嗨嗨,感谢您的及时回复 但是,如果您阅读我的在第一行中我提到了我的要求,并且我在几行之后提到了我不想将它分割开空间。 – Sameer