2010-04-26 3 views
11

Wenn Sie Variablen verwenden (ist das das richtige Wort?) In Python reguläre Ausdrücke wie folgt: "Blah (? P \ w +)" ("Wert" wäre die Variable), wie könnte Sie machen den Wert der Variablen zum Text nach "blah" bis zum Ende der Zeile oder zu einem bestimmten Zeichen, das den tatsächlichen Inhalt der Variablen nicht beachtet. Zum Beispiel ist dies Pseudocode für das, was ich will:Python Reguläre Ausdrücke Zuordnung zu benannten Gruppen

>>> import re 
>>> p = re.compile("say (?P<value>continue_until_text_after_assignment_is_recognized) endsay") 
>>> m = p.match("say Hello hi yo endsay") 
>>> m.group('value') 
'Hello hi yo' 

Hinweis: Der Titel ist wahrscheinlich nicht verständlich. Das ist, weil ich nicht wusste, wie ich es sagen sollte. Entschuldigung, wenn ich Verwirrung stifte.

+0

Ich habe Ihren Titel ein wenig repariert, aber ich denke, es war klar aus Ihrem Code Beispiel, was Sie wollten (zumindest hoffe ich, ich habe es richtig interpretiert). –

+0

FYI, das Zeug zwischen den Klammern heißt eine "Gruppe". In Ihrem Beispiel ist "Wert" ein Name. Sie stimmen also mit einer "benannten Gruppe" überein. – Stephen

Antwort

12

Dafür würden Sie wollen einen regulären Ausdruck von

"say (?P<value>.+) endsay" 

Die Periode jedes Zeichen entspricht, und das Pluszeichen zeigt an, dass das ein oder mehrere Male wiederholt werden sollte ... so bedeutet .+ eine beliebige Folge von ein oder mehrere Zeichen. Wenn Sie am Ende endsay setzen, wird die Engine für reguläre Ausdrücke sicherstellen, dass alles, was dazu passt, tatsächlich mit dieser Zeichenfolge endet.

+0

Arbeitete perfekt! Vielen Dank. – None

10

Sie müssen angeben, was Sie, wenn der Text übereinstimmen soll ist zum Beispiel

say hello there and endsay but some more endsay 

Wenn Sie die ganze hello there and endsay but some more String übereinstimmen soll, @ David Antwort richtig ist. Ansonsten nur hello there and übereinstimmen, muss das Muster sein:

say (?P<value>.+?) endsay 

mit einem Fragezeichen, nachdem das Pluszeichen, um es nicht gierige (standardmäßig ist es gierig, alle verschlang möglicherweise kann es während erlaubt eine Gesamtübereinstimmung; nicht-gierige bedeutet es schluckt als kleine als möglich, wieder während erlaubt eine Gesamtübereinstimmung).

+0

Ich dachte darüber nach, aber angesichts der Gespräche des OPs über die Übereinstimmung mit dem Ende der Linie schien es, als wäre ein gieriger Betreiber angemessen. Immer noch +1. –