Harte Nuss für reguläre Ausdrücke

Smalltalk
Antworten
Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Harte Nuss für reguläre Ausdrücke

Beitrag von Rebell » 03.09.2004 15:48:44

Hi.

Ich hab ein rießen Problem und versuche mich schon ne Weile daran ohne eine Lösung.
Ich muss aus einem HTML-File die Attribute der HTML-Tags entfernen und suche den passenden regulären Ausdruck dafür.

Hier ein Beispiel

Code: Alles auswählen

<TR VALIGN=TOP>
		<TD WIDTH=215>
			<H1 LANG="de-DE" CLASS="western">Sonnabend,      04.09. 14.30 Uhr</H1>
		</TD>
		<TD WIDTH=132>
			<P LANG="de-DE" CLASS="western"><FONT SIZE=3>Seu&szlig;litz</FONT></P>
		</TD>
		<TD WIDTH=87>
			<P LANG="de-DE" CLASS="western"><FONT SIZE=3>Niederlom.</FONT></P>
		</TD>
		<TD WIDTH=69>
			<P LANG="de-DE" CLASS="western"><FONT SIZE=3>15.00 Uhr</FONT></P>
		</TD>
		<TD WIDTH=85>
			<P LANG="de-DE" CLASS="western" ALIGN=CENTER><FONT SIZE=3>2,00  /
			1,00</FONT></P>
		</TD>
	</TR>
muss in

Code: Alles auswählen

<TR>
		<TD>
			<H1>Sonnabend,      04.09. 14.30 Uhr</H1>
		</TD>
		<TD>
			<P><FONT>Seu&szlig;litz</FONT></P>
		</TD>
		<TD>
			<P><FONT>Niederlom.</FONT></P>
		</TD>
		<TD>
			<P><FONT>15.00 Uhr</FONT></P>
		</TD>
		<TD>
			<P><FONT>2,00  /
			1,00</FONT></P>
		</TD>
	</TR>
Hat jemand ne Idee?
Außerdem: Wie würde ein Ausdruck lauten um einzelne Tags zu entfernen?
Also weg mit <font><p><h1> etc...
come to daddy, windowlicker!
get m:ke - http://get-mike.de

trozmo
Beiträge: 288
Registriert: 05.01.2003 20:01:03
Kontaktdaten:

Beitrag von trozmo » 03.09.2004 16:07:03

warum nicht mit dem vi?

Code: Alles auswählen

:1,$s/<TR VALIGN=TOP>/<TR>/g
:1,$s/<TD WIDTH=***>/<TD>/g
:1,$s/<TD WIDTH=**>/<TD>/g
etc.pp

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 03.09.2004 16:24:12

ansonsten wenn es non-interactive sein soll per "sed":

Code: Alles auswählen

cat htmldatei.htm | sed -e 's/\(.*<TD\).*\(>.*\)/\1\2/' -e 's/\(.*<TR\).*\(>.*\)/\1\2/' -e 's/\(.*<P\).*\(>.*\)/\1\2/' 
ist jetzt ungetestet, da ich an nem Windows PC sitze aber ungefähr so geht es... kannst du natürlich beliebig mit "-e 's/\(.*<???\).*\(>.*\)/\1\2/'" erweitern..
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 03.09.2004 16:37:10

in Perl würde ich es so machen:

Code: Alles auswählen

s/<(\w+) .+?>/<$1>/g;
und bestimmte Tags entfernen (am Beispiel font):

Code: Alles auswählen

s/<\/?font.*?>//ig;
bzw.
s!</?font.*?>!!ig;
Gruß,
blackstream

Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Beitrag von Rebell » 03.09.2004 16:50:13

Coole Sache - danke.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 03.09.2004 17:13:36

Ich denke er hätte es gerne allgemein, und nicht für jedes einzelne spezielle Tag...

Code: Alles auswählen

(0) $ cat test.txt
<a bla vla="blubb>
<p>
<jhfdjh>
</ggg>
<a href="kdfkjsdkfj">

(0) $ cat test.txt | sed -re 's/<([^/][a-zA-Z]*)[^>]*>/<\1>/'
<a>
<p>
<jhfdjh>
</ggg>
<a>
Ich habe es nur kurz angetestet, und wie Du siehst scheint die RegEx das zu tun... Leider werden auch Attribute ala <a href="..."> weggestrippt (das wird zu <a>).

This RegEx was constructed by KRegExpEditor :-)

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Antworten