Evan Fosmark gab bereits eine gute Antwort. Das ist nur mehr Infos.
Sie haben die folgende Zeile:
pattern = "6 of(.*)fans"
Generell dieser Ausdruck keine gute regelmäßig ist. Wenn der Eingabetext ist:
"6 von 99 Fans in der ganzen Galaxie von Fans"
Dann wird die Spiel-Gruppe (der Stoff in den Klammern) wäre:
"99 Fans in dem ganzen Galaxie von "
Also, wir wollen ein Muster, das nur greifen wird, was Sie wollen, auch mit einem dummen Eingabetext wie oben.
In diesem Fall spielt es keine Rolle, ob Sie den Leerraum anpassen, da Leerraum bei der Umwandlung einer Zeichenfolge in eine Ganzzahl ignoriert wird. Aber lassen Sie uns das Muster schreiben, um Leerraum zu ignorieren.
Mit dem Platzhalter *
ist es möglich, eine Zeichenkette mit der Länge Null abzugleichen. In diesem Fall denke ich, dass Sie immer eine nicht leere Übereinstimmung möchten, also möchten Sie +
verwenden, um ein oder mehrere Zeichen zu finden.
Python hat nicht gierige Anpassung zur Verfügung, so dass Sie damit umschreiben könnten. Ältere Programme mit regulären Ausdrücken dürfen nicht gierig sein, daher gebe ich auch ein Muster, das nicht gierig ist.
Also, die nicht gierigen Muster:
pattern = "6 of\s+(.+?)\s+fans"
Die andere:
pattern = "6 of\s+(\S+)\s+fans"
\s
bedeutet „jeder Leerraum“ und einen Raum passen, eine Registerkarte, und ein paar anderen Zeichen (z. B. "Form Feed"). \S
bedeutet "irgendein Nicht-Leerraum" und entspricht allem, was \s
nicht entspricht.
Das erste Muster tut besser als Ihr erstes Muster mit dem dummen Eingabetext:
„6 von 99 Fans in der ganzen Galaxie von Fans“
Es wäre eine Übereinstimmung Gruppe von nur 99
zurück.
Aber versuchen, diesen anderen dummen Eingabetext:
"6 von 99 verrückten Fans"
Es wäre eine Übereinstimmung Gruppe von 99 crazed
zurückzukehren.
Das zweite Muster würde überhaupt nicht passen, weil das Wort "verrückt" nicht das Wort "Fans" ist.
Hmm. Hier ist noch ein letztes Muster, das das Richtige auch mit dummen Eingabetexten immer tun soll:
pattern = "6 of\D*?(\d+)\D*?fans"
\d
entspricht eine beliebige Stelle ('0'
-'9'
). \D
entspricht jeder Nicht-Ziffer.
Dies wird erfolgreich alles akzeptiert, die remote nicht-mehrdeutig ist:
"6 von 99 Fans in der ganzen Galaxie von Fans"
Das Spiel Gruppe 99
sein wird.
"6 von 99 verrückten Fans"
Das Spiel Gruppe wird 99
sein.
"6 von 99 41 Fans"
Es wird nicht passen, weil es eine zweite Zahl in dort war.
Weitere Informationen zu regulären Python-Ausdrücken finden Sie unter variouswebpages. Für eine schnelle Erinnerung, in dem Python-Interpreter, tun:
>>> import re
>>> help(re)
Wenn Sie „Schaben“ Text von einer Webseite sind, können Sie manchmal in Konflikt geraten HTML-Codes ausgeführt werden. Im Allgemeinen sind reguläre Ausdrücke kein gutes Werkzeug, um HTML- oder XML-Markup zu ignorieren (siehe here); Sie würden wahrscheinlich besser verwenden, um den HTML-Code zu analysieren und den Text zu extrahieren, gefolgt von einem regulären Ausdruck, um den Text zu erhalten, den Sie wirklich wollten.
Ich hoffe, das war interessant und/oder lehrreich.
* scheint nicht zu funktionieren * ist kein Problem Beschreibung –
sidente: Sie sollten 'Linien' 'Linie' nennen – miku
Bitte senden Sie den Text, den Sie versuchen zu vergleichen und (wenn möglich) das Ergebnis erwarten Sie. – Mike