ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
1700
1700
EMPFEHLEN
-
17.11.08 10:55 #1
Mitglied Silber
- Registriert seit
- Mar 2005
- Beiträge
- 59
Hallo Leute. Heute habe ich folgendes Problem:
SUM(A1:A3) + SUM(A4:A10) + SUM(A3:A5) = zu untersuchende String
SUM\(\$?[A-z]+\$?[0-9]+:\$?([A-z]+)\$?([0-9]+)\) ?\+ ?SUM\(\$?([A-z]+)\$?([0-9]+):\$?[A-z]+\$?[0-9]+\) = das Pattern
Wie ihr sicherlich erkennen könnt, möchte ich ein Muster "SUM(xy:xy) + SUM(xy:xy)" herausfiltern. Für die ersten beiden SUMs funktioniert das auch super, allerdings findet der Matcher die zweite Kombination nicht. Also:
SUM(A1:A3) + SUM(A4:A10) wird gefunden und ausgegeben
SUM(A4:A10) + SUM(A3:A5) wird nicht gefunden
Warum ist das so? Ich dachte, dass wenn der matcher eine Übereinstimmung findet, dann wieder bei dem darauffolgenden Buchstaben beginnt und er somit die zweite kombination finden müsste. Oder muss ich da noch extra was angeben? Wenn ich übrigends folgenden String überprüfen lasse, findet er zwei (anstelle von eugentlich drei) Übereinstimmungen:
SUM(A1:A3) + SUM(A4:A10) + SUM(A3:A5) + SUM(A12:A15)
Und dann gleich noch die Frage hinterher: kann man den Patternausdruck auch noch vereinfachen/-kürzen?
Danke vorab für eure Unterstützung und Tipps.
Grüße
Hardie
-
22.11.08 00:33 #2
Hallo Hardi82,
ein Ansatz wäre Folgender:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
String text = "SUM(A1:A3) + SUM(A4:A10) + SUM(A3:A5)"; String regexpPart = "SUM\\(\\$?[A-Z]{1,2}\\$?\\d{1,5}:\\$?[A-Z]{1,2}\\$?\\d{1,5}\\)"; String regexp = "(" + regexpPart + " ?\\+ ?" + regexpPart + ")"; Matcher matcher = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE).matcher(text); int pos = 0; while(matcher.find(pos)) { String match = matcher.group(); System.out.println(match); pos = matcher.start() + 1; }
Hier werden die Groups einfach manuell durchgegangen und die find-Position auf den letzten Start-Index der Group plus 1 gesetzt. Somit werden alle Übereinstimmungen gefunden.
Ergebnis:
Code :1 2
SUM(A1:A3) + SUM(A4:A10) SUM(A4:A10) + SUM(A3:A5)
Habe zudem die Regular Expression noch ein wenig angepasst, da ich hier von der Anwendung Excel ausgehe
Code :1 2
> Spalten A bis IV => [A-Z]{1,2} > Zeilen 1 bis 65536 => \\d{1,5}
Viele Grüße,
MANBLT - Die Bundesliga Tabelle der Saison 2012 / 2013 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
24.11.08 11:23 #3
Mitglied Silber
- Registriert seit
- Mar 2005
- Beiträge
- 59
Hallo MAN,
deine Lösung sieht vielversprechend aus und auch etwas übersichtlicher
. Ich werde es nachher mal in meine Anwendung integrieren. Vielen Dank schonmal.
Grüße
Hardie
-
24.11.08 12:02 #4
Mitglied Silber
- Registriert seit
- Mar 2005
- Beiträge
- 59
So, ich nochmal. Hab den Vorschlag implementiert und funktioniert alles super. Vielen Dank.
Gruß
Hardie
Ähnliche Themen
-
Regex von String.matches für Split benutzen?
Von jeipack im Forum JavaAntworten: 3Letzter Beitrag: 26.08.09, 13:35 -
mehrere mySQL-Abfragen in einem String
Von Dac-XP im Forum PHPAntworten: 4Letzter Beitrag: 05.11.07, 18:53 -
PHP String für Javascript String Escapen. (String über mehrere Zeilen)
Von Lukasz im Forum PHPAntworten: 2Letzter Beitrag: 04.09.06, 12:07 -
Mehrere wörter in einem String verändern...
Von blotte im Forum C/C++Antworten: 3Letzter Beitrag: 12.06.06, 00:59 -
Einen Teil aus einem String herausschneiden. RegExp?
Von visionsign im Forum PHPAntworten: 2Letzter Beitrag: 19.04.06, 22:13




Zitieren
Login