2016-04-27 14 views
1

ich Anforderung habe eine Zeichenfolge auf einer Aufteilung auf Schlüsselwörter wie AND,OR,NOT,&,|,!,(,).Regex zu vermeiden Aufspaltung auf Sonderzeichen

Es gibt spezielle Zustand, wo ich will nicht zur Trennung von Worten, wenn ein paraenthesis '(' or ')' in der Mitte des Wortes kommt oder Klammern mit Sonderzeichen kommen in der Mitte des Wortes.Weder möchte ich auf Sonderzeichen aufteilen. Auch möchte ich nicht auf Leerzeichen aufteilen.

Wenn Klammer am Anfang des Wortes oder am Ende des Wortes kommt, dann muss ich nur teilen.

Zum Beispiel:

Meine Logik ist wie folgt.

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(?=\\)($|)))")); 

Splitted Ausgang, was ich von splitArray bin immer ist:

(((

TOM 

AND 

JERRAY) 

AND 

MIC(#*EY 

AND, 

MINEY)) 

Aber ich möchte die Ausgabe als:

(((

TOM 

AND 

JERRAY 

**)** 

AND 

MIC(#*EY 

AND, 

MINEY 

**))** 

-Code ich geschrieben hatte, nicht Spaltung geschlossen ist Klammern. Ich möchte das auch teilen. Kann mir jemand dabei helfen?

Antwort

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

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

Aber dieser Regex Halte nicht Splittern. Gibt es eine Möglichkeit, das zu behalten? – Sameer

0

EDIT: Verändert das Muster über and zu spalten, statt Leerzeichen.

Suchst du das?

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

Ausgang:

enter image description here

+0

Der Regex oben wird auch über den Raum verteilt. Ich möchte es nicht über den Raum verteilen. Kannst du es vermeiden, es im Weltraum zu teilen? – Sameer

+0

Das ist widersprüchlich zu Ihrer gewünschten Ausgabe im Post.Wenn Sie es nicht über den Raum teilen wollen, ist die Ausgabe in der Post nicht richtig. Es wäre: '((', 'TOM UND JERRAY',') UND MIC (# * EY UND MINEY', und '))'. – Quinn

+0

Hey Hallo, Danke für deine schnelle Antwort Aber wenn du meine liest Frage richtig, in der ersten Zeile hatte ich erwähnt meine Anforderungen zu teilen, und auch ich hatte nach wenigen Zeilen erwähnt, dass ich es nicht über den Raum teilen will .. – Sameer