Schon wieder Regex Problem :-/

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo ,
ich hänge schon wieder bei einem Regex fest.

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


public class RegexTest2 {
	public static void main(String args []){
		
	  Pattern pattern = Pattern.compile(">\\s+<");
	  
	  //alle leerzeichen zwischen end tags entfernen
	  String test = "</font>    [/i]      [/b]";
	  //leerzeichen zwischen [/b] und [i] sollen nicht entfernt werden
	  String test2 = "[b]ein[/b]  [i]test[/i]";
	  
	  Matcher matcher = pattern.matcher(test);
	  Matcher matcher2 = pattern.matcher(test2);
	  
	  if (matcher.find()){
		  System.out.println("alt:\t "+test);
		  System.out.println("neu:\t "+test.replaceAll(pattern.pattern(), "><"));	  
	  }
	  
	  System.out.println("\n");
	  
	  if(matcher2.find()){
		  System.out.println("alt:\t "+test2);
                  //falsch
		  System.out.println("neu:\t "+test2.replaceAll(pattern.pattern(), "><"));
	  }
	  
	  
	  
	}
}

Ich krieg es einfach nicht hin, dass Pattern so umzuformulieren, dass nur die Leerzeichen zwischen end Tags entfernt und nicht solche, die sich innerhalb eines schließenden und eines neuen tags befinden. Kann mir jemand helfen. Mfg Maik
 
S

SlaterB

Gast
">\\s+<"
dieses Pattern sagt ja gar nicht aus, dass es nur um schließende Tags geht, das muss da offensichtlich noch rein

wenn dir das schon klar ist, warum dann so eine komische Frage zu Leerzeichen und anderen uninteressanten Dingen
und nicht klipp und klar "wie beschreibt man ein schließendes Tag als Pattern?" ;)
 

0x7F800000

Top Contributor
Code:
import java.util.regex.*;

public class HTML_EmptySpaceBeautifier {

	public static void main(String[] args) {
		String input="<html>  <a> <blah>  \t </blah>    </a>  <blup>    </blup>  \t    </html>";
		
		String output=input;
		while(true){
			Matcher m=Pattern.compile("(</[a-zA-Z]*?>)([ \t]+?)(</[a-zA-Z]*?>)").matcher(output);
			if(m.find()){
				output=m.replaceFirst(m.group(1)+m.group(3));
			}else{
				break;
			}
		}
		
		System.out.println(input);
		System.out.println(output);
	}
}

das ist eine ziemlich lahme lösung, weil der onput-string iterativ bearbeitet wird, bei langen strings kann es imho ziemlich schnell ziemlich lahm werden. Aber eine bessere Lösung scheint regex nicht anzubieten:
Man muss ja irgendwie die beiden schliessenden tags mit leerraum dazwischen aussuchen, und das alles durch die zwei tags ohne leerraum ersetzen. Also finden-ersetzen-finden-ersetzen-finden-...

An dieser stelle will ich hinzufuegen, dass mir nicht ganz klar ist, wozu das gut sein soll... wenn schon, dann mach dasselbe bitte auch mit den oeffnenden tags, fuer den Fall, dass es so einer Art "html-code-beautifier" werden soll.
 
S

SlaterB

Gast
statt die groups manuell auszulesen kann man auch
string = string.replaceAll("(x)y(x)", "$1$2");
verwenden,
$1 ist dann das erste x

es sei noch angemerkt, dass man die schließenden Tags/ sonstigen Merkmale im String wohl nicht mehrfach verwenden kann

bei einem Beispielstring
xyxyx
kann man die ersten beiden x-e verwenden um ein y zu löschen,
das mittlere x ist dann aber 'verbraucht' und dürfte nicht mit den restlichen beiden Buchstaben zu einem zweiten Fund führen,

in diesem Fall reicht vielleicht, dass Pattern zweimal über den String laufen zu lassen
 
G

Guest

Gast
Also der Sinn des ganzen ist die Überführung in ein xml Dialekt.

Ein Text wie

Code:
  <font size="7">[b][i]test text[/i][/b] </font>

soll in ein spezielles Dialekt überführt werden.

Daraus wird dann sowas wie
Code:
<format
 <style isBold="true" isItalic="true" size="7">
    test text
  </style>
</format>

Also müssen verschachtelte Html Tags erkannt, ggfalls zu einer Gruppe zusammengefasst und ersetzt werden. für obiges Beispiel würde er nur [/i][/b] ersetzen

"[/i][/b]</font>" bzw. "[/i] [/b] </font>" soll aber nur durch "</style>" ersetzt werden.


Diese Regel soll aber für "[/i] " nicht gelten, da dann ja leerzeichen im text entfernt werden.

<font size="7"> test italic fett</font>
 
G

Guest

Gast
Also der Sinn des ganzen ist die Überführung in ein xml Dialekt.

Ein Text wie

Code:
  <font size="7">[b][i]test text[/i][/b] </font>

soll in ein spezielles Dialekt überführt werden.

Daraus wird dann sowas wie
Code:
<format
 <style isBold="true" isItalic="true" size="7">
    test text
  </style>
</format>

Also müssen verschachtelte Html Tags erkannt, ggfalls zu einer Gruppe zusammengefasst und ersetzt werden. für obiges Beispiel würde er nur [/i][/b] ersetzen

"[/i][/b]</font>" bzw. "[/i] [/b] </font>" soll aber nur durch "</style>" ersetzt werden.


Diese Regel soll aber für "[/i] " nicht gelten, da dann ja leerzeichen im text entfernt werden.

<font size="7"> test italic fett</font>
 

0x7F800000

Top Contributor
SlaterB hat gesagt.:
statt die groups manuell auszulesen kann man auch
string = string.replaceAll("(x)y(x)", "$1$2");
verwenden,
$1 ist dann das erste x
boah, cool, thx, wieder mal was dazugelernt :D das ganze wird dann natuerlich wesentlich kompakter :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U schon wieder regex Allgemeine Java-Themen 3
J Nicht schießen - schon wieder OpenOffice. Allgemeine Java-Themen 4
L schon wieder der "javac nicht gefunden" fehler Allgemeine Java-Themen 9
M schon wieder Comport-Problem Allgemeine Java-Themen 21
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
Thallius Herausfinden ob ein externes Programm schon gestartet ist? Allgemeine Java-Themen 10
S ExecutorService.invokeAll -- was passiert wenn einige Tasks schon ausgefuehrt wurden? Allgemeine Java-Themen 2
O Schon verbundene Punkte nicht erneut verbinden Allgemeine Java-Themen 7
GUI-Programmer Jar File funktioniert nicht auf PC2, auf PC1 schon Allgemeine Java-Themen 13
ARadauer Schon mal jemand für Ungarn CSV Datein geschreiben? Allgemeine Java-Themen 2
reibi Workspace schon geöffnet (Kein Eclipse Thema) Allgemeine Java-Themen 14
P J2EE EJB Einstieg - hängt schon am XDoclet + Eclipse Allgemeine Java-Themen 5
T läuft mein Programm schon? - wie feststellen Allgemeine Java-Themen 6
S Schon gewusst? Allgemeine Java-Themen 33
bummerland Wie lange programmiert ihr schon in Java? Allgemeine Java-Themen 10
Oneixee5 Oracle, wieder mal ... Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
V Scheinbar zufällig hin und wieder: Can't create an ImageOutputStream! Allgemeine Java-Themen 8
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
2 String Array in Datei schreiben und wieder davon lesen Allgemeine Java-Themen 2
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
F Wieder mal die eBay API Allgemeine Java-Themen 3
E Speicherverwaltung bzw. Speicher wieder frei geben?! Allgemeine Java-Themen 8
T JConsole: Klassen werden geladen aber nicht wieder entladen Allgemeine Java-Themen 3
S Thread vorübergehend stilllegen und wieder aufwecken Allgemeine Java-Themen 18
data89 A-Stern: fährt immer wieder vor die Wand! - Hilfeeee Allgemeine Java-Themen 7
L Thread kurz unterbrechen und wieder starten Allgemeine Java-Themen 5
L Applet immer wieder neu laden - Problem Allgemeine Java-Themen 25
T RegEx, wieder einmal ... :-( Allgemeine Java-Themen 19
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
C Aus XML ein DOM Objekt und wieder zurück Allgemeine Java-Themen 2
M wieder mal applet probleme Allgemeine Java-Themen 17
A HTML-Seite wieder schließen Allgemeine Java-Themen 2
W Wieder einmal: PNG ausdrucken Allgemeine Java-Themen 3
S GUI komplett schließen und wieder Neu laden? Allgemeine Java-Themen 4
C Bild in .txt speichern und wieder als Bild speichern Allgemeine Java-Themen 2
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
A String in umgekehrter reihenfolgen wieder geben Allgemeine Java-Themen 16
GilbertGrape mal wieder ne Regex-Frage Allgemeine Java-Themen 2
A Javakonsolenfenster geht gleich wieder zu Allgemeine Java-Themen 6
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
L Werte in externer Datei speichern und wieder auslesen? Allgemeine Java-Themen 8
M Programm schließen und wieder neu starten Allgemeine Java-Themen 9
E Wieder mal der Classloader Allgemeine Java-Themen 6
R Immer wieder NullPointerException Allgemeine Java-Themen 2
L JVM: Speicher wieder für OS freigeben? Allgemeine Java-Themen 5
I Aus Exception wieder zurück Allgemeine Java-Themen 5
J Thread beenden und wieder starten? Allgemeine Java-Themen 20
M Array in eine Datei Schreiben und wieder auslesen Allgemeine Java-Themen 10
S Job immer wieder ausführen Allgemeine Java-Themen 4
N Mal wieder char-encoding Probleme Allgemeine Java-Themen 5
P Filechooser öffnet sich immer wieder neu Allgemeine Java-Themen 4
L Speicherplatz eies RIESEN objektes direkt wieder freigeben Allgemeine Java-Themen 5
V Irgendwie benutzt er wieder Java 1.4 Allgemeine Java-Themen 7
G Array/String aus Request wieder in Array konvertieren Allgemeine Java-Themen 2
A gemaltes wieder löschen Allgemeine Java-Themen 24
U Mal wieder DoubleBuffering Allgemeine Java-Themen 20
A Thema JAR-Erstellung (mal wieder) => etwas komplizierter Allgemeine Java-Themen 8
T Objekte eindeutig zerlegen und wieder zusammen bauen? Allgemeine Java-Themen 6
B mal wieder jar! Allgemeine Java-Themen 53
S JPanel zur Laufzeit verbergen bzw. wieder anzeigen lassen Allgemeine Java-Themen 4
C Über C/C++ (JNI) angeforderten Speicher wieder frei geben Allgemeine Java-Themen 3
M statische regex und vergleiche oder immer wieder compilen Allgemeine Java-Themen 2
R Aus InputStream wieder eine Datei erzeugen? Allgemeine Java-Themen 2
M Mal wieder . Regular Expressions Allgemeine Java-Themen 2
J Mal wieder jars Allgemeine Java-Themen 2
T CMD nach aufruf von javaw Programmname wieder schließen Allgemeine Java-Themen 3
J String mit GZIPInputStream in Datei schreiben und wieder les Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
D Bilder einlesen, bearbeiten und wieder in Datei schreiben Allgemeine Java-Themen 3
G Adressen in Datei speichern und wieder auslesen Allgemeine Java-Themen 3
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben