webentwicklung-frage-antwort-db.com.de

Benannte reguläre Ausdrucksgruppe "(? P <Gruppenname> regulärer Ausdruck)": Wofür steht "P"?

In Python ist das (?P<group_name>…)Mit der Syntax kann auf die übereinstimmende Zeichenfolge über ihren Namen verwiesen werden:

>>> import re
>>> match = re.search('(?P<name>.*) (?P<phone>.*)', 'John 123456')
>>> match.group('name')
'John'

Wofür steht "P"? Ich konnte keinen Hinweis in der offiziellen Dokumentation finden .

Ich würde gerne Ideen bekommen, wie ich meinen Schülern helfen kann, sich an diese Syntax zu erinnern. Zu wissen, wofür "P" steht (oder stehen könnte), wäre nützlich.

151
Eric O Lebigot

Da wir alle raten, könnte ich es auch sagen: Ich habe immer gedacht, dass es für Python steht. Das mag ziemlich dumm klingen - was, P für Python ?! - aber zu meiner Verteidigung erinnerte ich mich vage an diesen Thread [Hervorhebung meines]:

Betreff: Beanspruchen von (? P ...) Regex-Syntaxerweiterungen

Von: Guido van Rossum (gui ... @ CNRI.Reston.Va.US)

Datum: 10. Dezember 1997, 15:36:19 Uhr

Ich habe eine ungewöhnliche Anfrage an die Perl-Entwickler (die die Perl-Sprache entwickeln). Ich hoffe das (Perl5-Porter) ist die richtige Liste. Ich schreibe das Python string-sig, weil es der Ursprung der meisten Arbeiten ist, die ich hier diskutiere.

Sie kennen wahrscheinlich Python. Ich bin Pythons Schöpfer. Ich plane, bis Ende dieses Jahres eine nächste "Major" -Version, Python 1.5, herauszubringen. Ich hoffe, dass Python und Perl koexistieren können In den kommenden Jahren kann die Fremdbestäubung für beide Sprachen von Vorteil sein. (Ich glaube, Larry hat sich Python als er Objekte zu Perl 5 hinzufügte, genau angesehen; O'Reilly veröffentlicht Bücher über beide Sprachen .)

Wie Sie vielleicht wissen, fügt Python 1.5 ein neues Modul für reguläre Ausdrücke hinzu, das der Perl-Syntax besser entspricht. Wir haben versucht, der Perl-Syntax in Pythons Syntax so nahe wie möglich zu kommen Die Regex-Syntax hat einige Python-spezifische Erweiterungen, die alle mit (? P.) beginnen. Derzeit gibt es zwei davon:

(?P<foo>...) Ähnlich wie bei regulären Gruppierungsklammern, aber der Text
Von der Gruppe gefundene Übereinstimmungen sind nach Durchführung der Übereinstimmung über den symbolischen Gruppennamen "foo" zugänglich.

(?P=foo) Entspricht der Zeichenfolge der Gruppe "foo". Entspricht\1,\2 usw. mit der Ausnahme, dass auf die Gruppe verwiesen wird
nach Name, nicht nach Nummer.

Ich hoffe, dass diese Python-spezifische Erweiterung nicht mit zukünftigen Perl-Erweiterungen der Perl-Regex-Syntax in Konflikt steht. Wenn Sie (? P verwenden möchten, teilen Sie uns dies bitte so bald wie möglich mit, damit wir den Konflikt lösen können. Andernfalls wäre es schön, wenn die (? P-Syntax dauerhaft reserviert werden könnte für Python-spezifische Syntaxerweiterungen. (Gibt es eine Art Registrierung für Erweiterungen?)

worauf Larry Wall antwortete:

[...] Derzeit gibt es keine Registrierung - Ihre ist die erste Anfrage von außerhalb von Perl5-Portern, es handelt sich also um eine Aktivität mit relativ geringer Bandbreite. (Entschuldigung, es war letzte Woche noch niedriger - ich war in New York bei Internet World.)

Sowieso, soweit es mich betrifft, können Sie sicher 'P' mit meinem Segen haben. (Offensichtlich braucht Perl an dieser Stelle kein 'P'. :-) [...]

Also weiß ich nicht, was die ursprüngliche Wahl von P durch - Muster motiviert war? Platzhalter? Pinguine? - aber Sie können verstehen, warum ich es immer mit Python in Verbindung gebracht habe. Was, wenn man bedenkt, dass (1) ich reguläre Ausdrücke nicht mag und sie nach Möglichkeit vermeide, und (2) dieser Thread vor fünfzehn Jahren stattfand, seltsam ist.

217
DSM

Muster! Die Gruppe benennt ein (Unter-) Muster für die spätere Verwendung im regulären Ausdruck. Siehe die Dokumentation hier für Einzelheiten darüber, wie solche Gruppen verwendet werden.

18
Mike