Seite 1 von 1

Regular Expressions

Verfasst: Mittwoch 4. März 2015, 14:52
von Padidem
Hallo!

Könnte mir jemand bei folgendem "Problem" helfen:

Ich habe folgende Links aus einer Homepage extrahiert (kleiner Auszug):

<img src="image/flag/France.png"/>,
<img src="image/flag/Canada.png"/>,
<img src="image/flag/Germany.png"/>,
<img src="image/flag/Spain.png"/>,
<img src="image/flag/Canada.png"/>,
<img src="image/flag/Italy.png"/>,


ich möchte mir nun mit Hilfe eines RegEX nur die Namen der Länder aus diesen Links ausgeben lassen.
Da ich im Umgang mit RegEx nicht so geübt bin: Könnte mir vielleicht jemand den Ausdruck nennen?


Vielen Dank!!

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 14:57
von BlackJack
@Padidem: HTML sollte man nicht mit regulären Ausdrücken verarbeiten. Womit auch immer Du an die `img`-Elemente gekommen bist solltest Du auch noch das `src`-Attribut extrahieren. Und dann braucht man auch keinen regulären Ausdruck mehr sondern kann den Dateinamen mit der `split()`- oder `partition()`-Methode trennen und dann das selbe mit der Dateinamenserweiterung machen. Oder man prüft auf '.png' und benutzt die Slicing-Syntax.

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:00
von Padidem
Das kann schon sein...aber die Aufgabenstellung muss mit einem Regex gelöst werden :/

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:04
von BlackJack
@Padidem: Und jetzt suchst Du jemanden der Deine Hausaufgaben für Dich löst? ;-)

Probier doch mal selber. Es gibt dafür ganz brauchbare Programme für den Desktop oder auch Online bei denen man den Beispieltext eingibt und dann den regulären Ausdruck entwickeln kann und gleich eine visuelle Rückmeldung bekommt was der erkennt. Online finde ich https://www.regex101.com/#python ganz nett.

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:15
von snafu
Wenn man es ganz billig lösen möchte, dann kopiert man sich einfach eine der Zeilen und ersetzt die Stelle, wo das Land steht (also zwischen den Anführungszeichen), durch den "Regex-Code" für beliebige sich wiederholende Zeichen. Wenn man darauf hofft, dass sich die Formatierung der zu parsenden Quelle niemals ändert, dann reicht dieses Vorgehen meistens auch schon aus. Empfehlenswert ist es aber trotzdem nicht.

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:37
von /me
Padidem hat geschrieben:Das kann schon sein...aber die Aufgabenstellung muss mit einem Regex gelöst werden :/
Ich kann durchaus deine Probleme mit der Aufgabe verstehen. Aufgrund des von dir ausgewählten Unterforums für deine Frage schließe ich, dass du reguläre Ausdrücke für ein Netzwerkprotokoll hältst.

Der reguläre Ausdruck müsste übrigens etwa so aussehen: /(\w+)\.png

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:45
von lackschuh

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 15:53
von BlackJack
@lackschuh: Das ist IMHO zu fehleranfällig. Da muss ja nur ein Wort drin vorkommen was kein Ländername ist aber mit einem Grossbuchstaben anfängt. Zum Beispiel wenn die das Verzeichnis von `flags` in `Flags` umbenennen, oder wenn jemandem auffällt das die Seite nicht barierrefrei ist oder das <img>-Elemente eigentlich ein `alt`-Attribut haben sollten.

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 16:32
von Padidem
und wie kann ich den RegEx mit einer Liste namens "flags" die folgendermaßen aussieht (Auszug) kombinieren?

[ 'image/flag/UnitedKingdom.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedKingdom.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png',
'image/flag/UnitedStates.png'] ...


.... ich will diese Liste in eine neue Liste (mit Hilfe des Regex) umwandeln, die mir nur die Ländernamen für alle Elemente ausgibt.

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 16:53
von Hyperion
Wieso kombinieren? Was ist das Ziel? Ich kapiere das immer weniger...

Vielleicht postest Du doch mal einen Link zur Aufgabe? ;-)

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 17:01
von BlackJack
@Padidem: Reguläre Ausdrücke kann man nicht auf Listen anwenden sondern nur auf Zeichenketten (bzw. `str` und `unicode` in Python 2). Wenn Du einen regulären Ausdruck auf jedes Element in einer Liste anwenden möchtest, dann musst Du genau das tun: den auf jedes Element anwenden. Also Code schreiben der das tut. Eine Schleife, oder eine „list comprehension”, oder Du schreibst eine Funktion die *ein* Element verarbeitet und verwendest dann die `map()`-Funktion um die auf jedes Element in der Liste anzuwenden und eine Ergebnisliste zu liefern (Python 2, in Python 3 muss man noch `list()` mit dem Iterator aufrufen den `map()` liefert).

Re: Regular Expressions

Verfasst: Mittwoch 4. März 2015, 20:54
von /me
Padidem hat geschrieben:.... ich will diese Liste in eine neue Liste (mit Hilfe des Regex) umwandeln, die mir nur die Ländernamen für alle Elemente ausgibt.
So etwas teilt man - wie jedes nicht-triviale Programm - in einzelne Bestandteile auf.

Schreib erst einmal eine Funktion, die mit einem String arbeitet und teste diese. Wenn das funktioniert, dann schreibst du eine weitere Funktion die mit einer Liste arbeitet und für jedes einzelne Element die vorher geschriebene Funktion verwendet.