2016-04-27 43 views
1

我對分裂關鍵字串像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 

**))** 

代碼我寫的不是分裂關閉括號。我也想分開。誰能幫我這個 ?

回答

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

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

但這正則表達式是不保留分離器。有什麼辦法可以保留這個嗎? – Sameer

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

+0

上面的正則表達式也在空間上分裂。我不想在空間上分割它。你能避免在太空中分裂嗎? – Sameer

+0

這與您在post中的所需輸出衝突。如果您不想將其分散在空間中,則帖子中的輸出不正確。它會是:'((('''TOM和JERRAY',')和MIC(#* EY AND MINEY'和'))'。 – Quinn

+0

嗨嗨,感謝您的及時回覆 但是,如果您閱讀我的在第一行中我提到了我的要求,並且我在幾行之後提到了我不想將它分割開空間。 – Sameer