正则表达式,以避免对特殊字符
问题描述:
我对分裂关键字串像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|\\))+|\\)^(.)|^(.)\\("));
答
编辑:修改的图案分裂超过and
,代替空格。
你是在找这个吗?
String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";
String[] splitArray= str.toUpperCase().split("(?i)(?<=\\()()(?=\\w)|(?<=\\w+)()(?=\\))|()(?=and)|(?<=and)()");
输出:
但这正则表达式是不保留分离器。有什么办法可以保留这个吗? – Sameer