HTML String und regex

Status
Nicht offen für weitere Antworten.
A

Annox

Gast
Hallo,
ich komme gerade nicht drumherum, einen html String zu "durchforsten" und das Attribute size zu ersetzen. HIntergrund ist der, dass das Attribute size in allen html Strings vorkommt und um 2 verkleinert werden muss... Mir fehlt ein bisschen das know How. Nehmen wir an, ich habe den folgenden html String gespeichert:


Code:
 <html>
  <head>    
  </head>
  <body bgcolor="#ccff00">
    <p style="margin-top: 0">
      <font face="Lucida Bright" size="6">Hallo Schorsch, </font>
    </p>
    <p style="margin-top: 0">
      <font face="Lucida Bright" size="6">Dies ist ein Test
</font>    </p>
    <p style="margin-top: 0">
      
    </p>
    <p style="margin-top: 0">
      
    </p>
    <p style="margin-top: 0">
      [i][b]<font size="5" face="Forte">Noch ein Test</font>[/b][/i]
    </p>
  </body>
</html>


Nun soll in dem gesamten String das Attribute size="\\D" um size="\\D-2" ersetzt werden. Jeder Wert wird also um 2 verkleinert, was in obigem Beispiel 2 mal den Wert 4 und 1 mal den Wert 3 bringen würde.
Dachte an einen solchen Ansatz, das haut aber nich so ganz hin ;(




Code:
String test = element.getHTMLText().replaceAll("size='\\D'", "size='2'");


Der 2. Parameter müsste nat. irgendwie dynamisch sein also immer 2 weniger als die aktuell gefundene Zahl

Hilfe
 
A

Annox

Gast
Hm, hab zwar noch nicht damit gearbeitet aber wenn das die bessere wahl ist...
schau ich mir mal an . Danke.
 

abollm

Top Contributor
Wildcard hat gesagt.:
Willst du nicht lieber einen HTML Parser verwenden?
http://java-source.net/open-source/html-parsers

Na ja, erscheint mir für so eine Aufgabe ein wenig wie "mit Kanonen auf Spatzen schießen".

Hier für dich Annox ein Q&D-Ansatz, den du simpel um die Routine zum Austauschen ergänzen kannst:

Code:
package regex;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SearchAndReplaceInHTML {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
    	String fileName;
    	if (args.length == 0) {
    		fileName = "My.html";
    	} else
    		fileName = args[0];
    	BufferedReader buffIn = new BufferedReader(new FileReader(fileName));
		String fileLine;
		int i = 0;
		while ((fileLine = buffIn.readLine()) != null) {
			//System.out.println(fileLine);
			String regex = "size=\"(.*?)\"";
			Pattern pattern = Pattern.compile(regex);
			Matcher matcher = pattern.matcher(fileLine);
			while (matcher.find()) {
				System.out.println("Match in line # "+i+": "+matcher.group());
			}
		++i;
		}
	}

}

Hth
 

Wildcard

Top Contributor
abollm hat gesagt.:
Na ja, erscheint mir für so eine Aufgabe ein wenig wie "mit Kanonen auf Spatzen schießen".
Da gebe ich dir recht, aber gerade in HTML steht oft ziemlicher Müll drin. Ich wäre da vorsichtig und würde wohl einen Parser nehmen. Hängt aber natürlich auch davon ob wie kritisch die Sache ist und ob irgendwelche Aussagen über die Validität der Datei getroffen werden können.
 
A

Annox

Gast
Ah Cool, Danke. Ist vielleicth doch ein bisschen einfacher für mich.
 
A

Annox

Gast
Achso,

ja. Der html Code den ich da verarbeiten muss ist teilweise wirklich ziemlich aufgeblähter Müll (der wurde automatisch generiert). Aber, da er nicht weiter verwendet wird und die html Strings nie wirklich groß sind, geht das wohl schon in Ordnung.
 

abollm

Top Contributor
Wildcard hat gesagt.:
Da gebe ich dir recht, aber gerade in HTML steht oft ziemlicher Müll drin. Ich wäre da vorsichtig und würde wohl einen Parser nehmen. Hängt aber natürlich auch davon ob wie kritisch die Sache ist und ob irgendwelche Aussagen über die Validität der Datei getroffen werden können.

Klar, sauber ist das da oben von mir sicher nicht. Deshalb hab ich ja auch mit voller Absicht Q&D-Lösung dazu geschrieben. Mit dem Müll in HTML-Dateien hast du ebenfalls Recht, aber meistens kann man durch ein "Quer-über-die-Datei-schauen" erkennen, was für eine Art HTML man hat.

Außerdem, wenn ich jedes Mal für relativ einfache Aufgaben die "formvollendete" Lösung nehmen würde, komme ich zeitlich so gut wie nie hin. Anders sieht die Sache natürlich aus, wenn man ähnliche Aufgaben immer wieder machen muss: Dann auf jeden Fall eine professionelle Lösung erstellen.
 

Wildcard

Top Contributor
Annox hat gesagt.:
(der wurde automatisch generiert). Aber, da er nicht weiter verwendet wird und die html Strings nie wirklich groß sind, geht das wohl schon in Ordnung.
Dafür ist die Lösung von abollm sicherlich richtig.

@abollm
fully ack
 
A

Annox

Gast
Sorry,
in Anlehnung an die Quick & Dirty Methode hätte ich noch eine Frage. Was ist hier konkret Q D ?
bzw was heißt professionelle Lösung. Meint ihr damit, dass man dann eine Methode dafür schreibt, etwa in der Form

Code:
String parseAndReplace (File file, String tag, int value) {
  
   //parst eine html datei und setzt tag mit value

  return htmlText;
}


Meint ihr sowas ?
 

abollm

Top Contributor
Annox hat gesagt.:
Sorry,
in Anlehnung an die Quick & Dirty Methode hätte ich noch eine Frage. Was ist hier konkret Q D ?
bzw was heißt professionelle Lösung. Meint ihr damit, dass man dann eine Methode dafür schreibt, etwa in der Form

Code:
String parseAndReplace (File file, String tag, int value) {
  
   //parst eine html datei und setzt tag mit value

  return htmlText;
}


Meint ihr sowas ?

Mit Quick & Dirty meinte ich, dass ich mit einem relativ simplen RegEx-Parsing die HTML-Datei Zeile für Zeile nach dem Auftreten des von dir angegebenen Strings durchsuche. Es kann so nicht grundsätzlich ausgeschlossen werden, bestimmte Repräsentationen von size =" zu übersehen oder ggf. nicht relevante Repräsentationen in beispielsweise Kommentarzeilen unnötig zu wandeln.

Professionell ist m.E eine Lösung immer dann, wenn sie auf möglichst langjährig erprobten und bewährten Verfahren beruht und somit mit sehr hoher Wahrscheinlichkeit alle denkbaren Fälle in der Praxis abdeckt. Insofern ist so ein HTML-Parser wie von Wildcard vorgeschlagen immer die solidere und saubere Lösung. Problem ist nur häufig die zur Verfügung stehende Zeit.

Das mit der Methide oben ist sicherlich gut und notwendig, aber IMO nicht hinreichend für eine prof. Lösung im hier beschriebenen Fall
 

Oni

Top Contributor
Ich bräuchte mal Hilfe von den Regex-Künstlern

In einer HTML-Datei habe ich das body-Tag. Das würde ich gerne finden und tauschen.

z.B.:
String xyz = htmlString..replaceAll("<body>" , "<body irgendwas="..">");

Das geht ja auch. Nun kann es aber vorkommen, dass das body-Tag bereits Attribute hatte. Das habe ich dann so probiert.

z.B
String xyz = htmlString..replaceAll("<body.*>" , "<body irgendwas="..">");

geht auch wunderbar. Das Problem ist wenn in der Zeile mit dem body-Tag weitere HTML-Tags kommen.

<body att="..">
bla

Kann ich in Regex irgendwie sagen "bis zum ersten >" ?
 

Oni

Top Contributor
Ok hab was.


Code:
String xyz = htmlString..replaceAll("<body>|<body[^>]+>" , "<body irgendwas="..">");
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
OnDemand String aus html einlesen Allgemeine Java-Themen 2
M String in Html Text umwandeln Allgemeine Java-Themen 2
G Code (zb html) als string speichern Allgemeine Java-Themen 2
J Filter für String (HTML) Allgemeine Java-Themen 2
T Html aus einem String strippen + Sonderzeichen ersetzten Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
M Html Seite auslesen Allgemeine Java-Themen 16
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L HTML Formular ausführen Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
A Applet in HTML einbinden Allgemeine Java-Themen 1
KeVoZ_ JSoup - HTML Tag entfernen Allgemeine Java-Themen 1
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P HTML Text bearbeiten Allgemeine Java-Themen 1
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
OnDemand Substring einer HTML Seite will nicht Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
R HTML Tabelle durchsuchen Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
T Keyword Highlighting in HTML Allgemeine Java-Themen 5
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
H HTML Parsing errors Allgemeine Java-Themen 9
P Aktuellen HTML Code auslesen (von JS manipuliert) Allgemeine Java-Themen 3
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
M html aus aktuellem Browserfenster mitlesen lassen Allgemeine Java-Themen 5
T Kann HTML Datei nicht lesen Allgemeine Java-Themen 3
S HTML-Quelltext nach bestimmter Stelle durchsuchen Allgemeine Java-Themen 2
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
M Wicket Html Allgemeine Java-Themen 2
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
S Fehler Applet-HTML Allgemeine Java-Themen 5
B suchfunktion in html integrieren Allgemeine Java-Themen 3
DEvent Wieso ist Javadoc mit Html Tags? Allgemeine Java-Themen 47
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
B RTF zu HTML Allgemeine Java-Themen 3
S Von HTML-Seite den Titel bekommen Allgemeine Java-Themen 2
M .jar in HTML einbinden Allgemeine Java-Themen 5
H Kleiner HTML Parser (Facharbeit) Allgemeine Java-Themen 11
K iText, HTML Einrückung im Document, aber nicht im Paragraph Allgemeine Java-Themen 3
J Überprüfen ob URL eine HTML Datei referenziert Allgemeine Java-Themen 4
E Zeilenumbruch html Allgemeine Java-Themen 3
J URLs aus HTML Datei extrahieren Allgemeine Java-Themen 2
G Swing JEditorPaneAppender (Output im HTML-Format) Allgemeine Java-Themen 12
W Java Anwendung in HTML Allgemeine Java-Themen 2
M Html Unit Whitespace-Problem Allgemeine Java-Themen 4
J HTML-Sonderzeichen ersetzen Allgemeine Java-Themen 2
M HTML-Websiten verarbeiten Allgemeine Java-Themen 8
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
I HTML Seite laden Allgemeine Java-Themen 6
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
S Formatierungen aus HTML-Dokument übernehmen und in Word docx schreiben Allgemeine Java-Themen 3
E HTML File mit Umlaute einlesen Allgemeine Java-Themen 8
T HTML Parser Allgemeine Java-Themen 7
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Swing mit JEditorPane per HTML auf Bilder in JAR zugreifen. Allgemeine Java-Themen 3
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
H Java Methode zum HTML encodieren/decodieren Allgemeine Java-Themen 2
Daniel_L Bug in Copy-Funktion bei HTML-Editorpane? Allgemeine Java-Themen 4
M JApplet einbinden in HTML Allgemeine Java-Themen 19
F Problem mit regulären Ausdruck in Zusammenhang mit HTML Allgemeine Java-Themen 8
T JavaScript aus HTML im JEditorPane ausführen? Allgemeine Java-Themen 5
S PDF nach HTML oder XML Allgemeine Java-Themen 2
O Tastendrücke in verstecktes HTML-Formular schreiben Allgemeine Java-Themen 4
D Strings von HTML befreien Allgemeine Java-Themen 17
A HTML-Seite aufrufen, drucken und zum Programm zurückkehren Allgemeine Java-Themen 2
E Html tags entfernen optimieren Allgemeine Java-Themen 12
Q API zum Verarbeiten von HTML Allgemeine Java-Themen 4
DerEisteeTrinker PDF mit seiner Formatierung in HTML umwandeln Allgemeine Java-Themen 15
B Java in HTML stellen Allgemeine Java-Themen 11
M id aus HTML (Regex) Allgemeine Java-Themen 7
D HTML mit Java verknüpfen Allgemeine Java-Themen 2
W HTML-Pfad Allgemeine Java-Themen 4
G HTML-Datei einlesen, Plain Text in Textfile speichern Allgemeine Java-Themen 4
A HTML-Seite wieder schließen Allgemeine Java-Themen 2
E JTidy html "hidden" Button drücken Allgemeine Java-Themen 7
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
data89 Java und HTML-Seiten mit Bildern - Wie passt das zusammen? Allgemeine Java-Themen 2
C Applet: JFileChooser: PFad an HTML zürückgeben Allgemeine Java-Themen 4
T Webseite (HTML) Parser gesucht Allgemeine Java-Themen 8
Daniel_L RegEx: UBB in HTML konvertieren, Problem Verschachtelung Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben