2017-09-12 3 views
0

schneiden will ich diesen Textregulärer Ausdruck Text

UNIT=1111,SPACE=(TRK,0),DISP=(MOD,DELETE,DELETE),DSN=UUU.AAAAA.BBBBB 

Ergebnis schneiden:

UNIT=1111 
SPACE=(TRK,0) 
DISP=(MOD,DELETE,DELETE) 
DSN=UUU.AAAAA.BBBBB 

ich mich versucht, aber ich bin Noob so mit regulären Ausdrücken, benutzen ich (\S+)=(\S+) es zu schneiden, aber es funktioniert nicht korrekt.

Jemand könnte mir helfen?

Hier ist mein Java-Code

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

final String regex = "(\\S+)=(\\S+)"; 
final String string = "UNIT=1111,SPACE=(TRK,0),DISP=(MOD,DELETE,DELETE),DSN=UUU.AAAAA.BBBBB" 

final Pattern pattern = Pattern.compile(regex); 
final Matcher matcher = pattern.matcher(string); 

while (matcher.find()) { 
    System.out.println("Full match: " + matcher.group(0)); 
    for (int i = 1; i <= matcher.groupCount(); i++) { 
     System.out.println("Group " + i + ": " + matcher.group(i)); 
    } 
} 
+0

Welches Werkzeug/welchen Code verwenden Sie? –

+0

@ WiktorStribiżew Ich benutze Java –

+1

So zeigen Sie uns das Java, das Sie ausprobiert haben. – slim

Antwort

1

Sie können diese negativ für das Aufspalten Look-Ahead-regex verwenden:

String[] arr = str.split(",(?![^()]*\\))"); 

Dies wird unter der Annahme, ( und ) alle ausgewogen und unescaped sind.

RegEx Demo

RegEx Breakup:

  • ,: Spiel eine wörtliche Komma
  • (?![^()]*\\)): Negative Look-Ahead, dass Komma zu behaupten, ist nicht in einem (...)
+0

'(?! [^()] * \\))' nicht gewährleistet Das ',' ist nicht innerhalb '(...)', es stellt nur sicher, dass es kein ')' nach 0+ Zeichen außer '(' und ')' rechts von der aktuellen Position gibt. –

+0

Wie ich in Antwort geschrieben habe, wenn '(' '' '' '' ''' ''' '' '' '' '' '' 'balanciert' 'sind, bedeutet das indirekt, dass Komma nicht innerhalb' (...) 'ist – anubhava