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!!
Regular Expressions
@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.
@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.

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.
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.
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.Padidem hat geschrieben:Das kann schon sein...aber die Aufgabenstellung muss mit einem Regex gelöst werden :/
Der reguläre Ausdruck müsste übrigens etwa so aussehen: /(\w+)\.png
@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.
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.
[ '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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wieso kombinieren? Was ist das Ziel? Ich kapiere das immer weniger...
Vielleicht postest Du doch mal einen Link zur Aufgabe?
Vielleicht postest Du doch mal einen Link zur Aufgabe?

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@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).
So etwas teilt man - wie jedes nicht-triviale Programm - in einzelne Bestandteile auf.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.
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.