Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Python] for-løkker og HTML-decode

3 views
Skip to first unread message

Bertel Lund Hansen

unread,
Jan 21, 2012, 10:46:58 PM1/21/12
to
Hej alle

I PHP kan man lave en løkke på én linje hvor både nummer og
variabel gennemløbes automatisk:

foreach ($linearray as $nr => $line) { do_something(); }

Kan man noget lignende i Python? Det forekommer mig at der er
mange smarte for-løkketyper, men jeg kan aldrig finde opskriften
når jeg lige står og skal bruge dem.

Jeg har brug for at fjerne HTML-entities fra nogle strenge. Der
er ikke tale om at de skal HTML-parses. Jeg skal også have
fjernet HTML-tags.

Hvordan gør man det?

Den eneste løsning jeg kan se - efter flittig læsning af en
meget uoverskuelig manual - er en bruteforce-metode med gennemløb
af specifikt angivne værdier samt udradering af alt
mellem < og >.

--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/

Anders J. Munch

unread,
Jan 23, 2012, 7:36:49 PM1/23/12
to Bertel Lund Hansen
Den 12-01-22 04.46, Bertel Lund Hansen skrev:
> Hej alle
>
> I PHP kan man lave en løkke på én linje hvor både nummer og
> variabel gennemløbes automatisk:
>
> foreach ($linearray as $nr => $line) { do_something(); }

Jeg kan ikke PHP, så jeg ved ikke om der er mere i det, men måske er det bare
enumerate du mangler:

for no,line in enumerate(linearray):
...

> Jeg har brug for at fjerne HTML-entities fra nogle strenge. Der
> er ikke tale om at de skal HTML-parses. Jeg skal også have
> fjernet HTML-tags.
>
> Hvordan gør man det?

Quick-and-dirty måden er med regulære udtryk, à la:

import re
re.sub(r'</?(html|body|p)[^>]*>', '',
'<html><body><p>Testing, <em>1,2,3</em></p></body></html>')

Tager ikke højde for fx attributværdier der indeholder >-tegn.

Til noget mere poleret kan BeautifulSoup biblioteket formentlig bruges. Selv om
det jo så bliver HTML-parset. Eller man kan raffinere det regulære udtryk.

Entities der bare skal slettes kan tilføjes som alternativer i samme regexp;
hvis de skal erstattes med entity-specifik tekst (&aelig; til æ osv.), så vil
jeg foreslå re.sub med et regulært udtryk der matcher alle entities, og en
replacement-funktion i stedet for tekst (se re.sub doks), og i den funktion
finde erstatningsteksten med et opslag i en dict.

mvh. Anders


Bertel Lund Hansen

unread,
Jan 25, 2012, 10:24:25 AM1/25/12
to
Anders J. Munch skrev:

>> foreach ($linearray as $nr => $line) { do_something(); }

> Jeg kan ikke PHP, så jeg ved ikke om der er mere i det, men måske er det bare
> enumerate du mangler:

> for no,line in enumerate(linearray):

Det er præcis det jeg har brug for. Tak.

>> Jeg har brug for at fjerne HTML-entities fra nogle strenge.

> Quick-and-dirty måden er med regulære udtryk, à la:

Det kikker jeg på selv om jeg ikke er nogen haj til regulære
udtryk.
0 new messages