2016-06-07 6 views
-1

Ich verstehe diesen Code in Python nicht. Ich weiß, was die Funktion macht, aber ich bekomme nicht, wie und was diese \\ in der Ersatzzeichenfolge tun.Was bedeutet der folgende re-Code?

import re 
caps="([A-Z])" 
pre="(Mr|mr|Mr|St|st|ST|Mrs|MRS|mrs|Ms|MS|ms|Dr|DR|dr|miss|Miss|MISS)[\.\.\.]" 
def tokenize_sentence(text): 
    text=re.sub(" ?"+pre,"\\1<dot>",text) 
    text = re.sub(caps + "[.]" + caps + "[.]" + caps + "[.]", "\\1<prd>\\2<prd>\\3<prd>", text) 
    print(text) 
tokenize_sentence("Mr. Ansh sahajpal A.B.C.") 

Die Ausgabe lautet:

Mr<dot> Ansh sahajpal A<prd>B<prd>C<prd> 

Wenn Sie mir erklären kann, wie funktioniert die \\1, \\2 und \\3 tut in den sub Funktionen es erstaunlich sein wird. Auch änderte ich den Eingang zu Mr... Ansh sahajpal und in der Leitung 5 Ich hatte die folgende Änderung:

text=re.sub(" ?"+pre,"\\1<dot>\\2<dot>",text) 

Was ich dachte, es tun wird, um die erste und die zweiten .. ersetzen, aber es gab mir einen Fehler.
Bitte jede Erklärung tun.

+0

Ihre Frage bezieht sich nicht auf das Thema, da Sie nach Debugging-Hilfe fragen. Wenn Sie einen Debugger Zeile für Zeile ausführen, können Sie verstehen, was Ihr Code tut. Btw, '\ 1' oder' \ someNumber' ist der Regex Capturing Group Index, also wenn deine Regex 'Hallo' erfasst hat, dann wenn du' \ 1' verwendest, referenzierst du auf Hallo, also '\ 1 \ 1' wird' ' hellohello' –

+0

Beachten Sie, dass Python aller Sprachen sehr empfindlich auf Einrückung reagiert. Was du geschrieben hast, kompiliert nicht, weil du den Rumpf der Funktion nicht eingerückt hast. Ich habe den Umfang der Funktion erraten. Bitte seien Sie beim nächsten Mal sehr vorsichtig. Wenn Sie einen Fehler melden, geben Sie bitte die Fehlermeldung an, die Sie erhalten haben. Ich nehme an, es sagte etwas darüber aus, dass es keine zweite gefangene Saite gibt, auf die sich die "\\ 2" beziehen würde - aber wir sollten nicht raten müssen; Sie sollten uns von Anfang an erzählen. –

Antwort

2

Die \1, \2 usw. beziehen sich auf übereinstimmende Teilausdrücke (in Klammern eingeschlossen) in einem regulären Ausdruck. \1 ist der erste übereinstimmende Ausdruck, \2 ist der zweite usw. Sie werden in der Ersetzungszeichenfolge verwendet, um zu markieren, wo übereinstimmende Teilausdrücke geändert werden sollen.

Gemeinsame Konvention für übereinstimmende Teilausdrücke ist die Verwendung von Klammern. Hier ein Beispiel:

str = 'an example word:cat!!' 
print (re.sub (r'word:(\w+)', r'\0dog', str)) 

, die nach einem Doppelpunkt und liefert eine beliebige Anzahl von alphanumerischen Zeichen, sagt entsprechen:

an example word:dog!! 

In diesem Fall (\ w +) ist ein gruppierte Ausdruck für den Satz von alphanumerischen Zeichen einschließlich "_".