Regex Capture Problem

v4nn3lle

Grünschnabel
Hallo zusammen,

Ich habe folgendes Problem.
Ich möchte aus einer Textdatei die so aufgebaut ist die Zahlen auslesen, und zwischen Zeilen, Spalten und Matrix unterscheiden.
Ziel ist es, die einzelnen Zahlen aus einem Array dann speziellen Feldern in einer Grafik zuzuordnen.
Zeilen
3
5
2 2
5
3
2 1
5 3
6
1
9
Spalten
1
2 1
2 1
3 2 1
5 2 1
2 7
5 1 1
3 2 1
2 1
1
Matrix
2220110222
2000110000
0000120000
0000110000
0000110000
0000210000
2111112111
0000110000
2222212222
0111111110

Der Lösungsansatz war folgender:

String s = new String(cb);
Pattern p=Pattern.compile("Zeilen\r\n(([0-9+])\r\n)*.*",Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);

Matcher m=p.matcher(s);
if(m.matches()) {
String debug="";
if(m.groupCount()>1){
for(int bla=1;bla<m.groupCount()+1;bla++){
debug+=m.group(bla);
debug+="\r\n";
}
} else {
debug="no matches!!";
}
JOptionPane.showMessageDialog(this, debug);
} else {
JOptionPane.showMessageDialog(this, "file is broken!");
}

Jetzt sollte doch eigentlich alle Zahlen von 0-9 nach dem Wort Zeilen ausgegeben werden ... seltsamerweise ist die Ausgabe:

Wäre über eine Hilfe oder eine Korrektur sehr erfreut :)

lg
v4nn3lle
 
Hi.

Mit dem Teilmuster "[0-9+]" akzeptierst du genau 1 Zeichen das entweder 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 oder + ist.

Du meintest vermutlich stattdessen "[0-9]+" bzw. "\\d+"

Außerdem würde ich die CRLF nicht in das Pattern mit aufnehmen verwende doch einfach "\\s".

Gruß
 
ok, also so funktionierts:
"Zeilen\\s(([\\d]*\\s)*).*"

Die Ausgabe der eingelesenen Zeilen ist zwar korrekt, allerdings sollte er die einzelnen Zeilen zur Weiterverarbeitung in einzelne Gruppen verpacken.
Es wird allerdings nur eine einzelne Gruppe erstellt, die alle eingelesenen Strings enthält.
 
Die Ausgabe der eingelesenen Zeilen ist zwar korrekt, allerdings sollte er die einzelnen Zeilen zur Weiterverarbeitung in einzelne Gruppen verpacken.
Es wird allerdings nur eine einzelne Gruppe erstellt, die alle eingelesenen Strings enthält.
Das ist nicht richtig. Gruppe 0 enthält die gesamte Übereinstimmung, Gruppe 1 die Übereinstimmung des zuletzt vom Muster der Gruppe erkannten Übereinstimmung und Gruppe 2 ebenso.

Es werden nicht mehr Gruppen erzeugt als Klammern in dem reg. Ausdruck stehen.

Du könntest die split Methode verwenden um ein Array von Strings zu erhalten.

Gruß
 
Zurück