infostabil > edb.programmering.* > edb.programmering.general

Bertel Lund Hansen (22.01.2012, 05:46)
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 >.
Anders J. Munch (24.01.2012, 02:36)
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 (25.01.2012, 17:24)
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.
Lignende emner