2012-03-25 6 views
1

Sagen wir, ich habe eine Zeichenfolge:kann .text nicht entfernen. mit einem regulären Ausdruck

"the quick brown fox jumped over the moon.this text needs to be removed." 

ich ".this text needs to be removed." mit Python zu entfernen versuche.

Ich habe mehrere Möglichkeiten ausprobiert, hauptsächlich bestehend aus \w+(\..*\.), aber es funktioniert nicht. Ich brauche einen allgemeinen Weg, um diesen letzten Teil zu entfernen, da der Text pro Datei unterschiedlich ist, so etwas wie re.sub('\.this text needs to be removed\.', '', string) wird nicht für mich arbeiten.

+0

Stack-Überlauf ist mein entkam Punkt nicht angezeigt wird, ich buchstäblich aus dem ersten Punkt zu erfassen suchen dann alle alles, was die Art und Weise bis zum letzten Punkt wieder. Im obigen Beispiel sind der erste Punkt und der letzte Punkt maskiert, sie werden einfach nicht angezeigt –

+0

Punkt ist ein Sonderzeichen in Markdown (für Aufzählungen), also mit \. Im Klartext wird nur der Punkt angezeigt. Um dies zu beheben, verwenden Sie entweder Backticks für Code (wie für Ihre Frage, jetzt bearbeitet) oder den Backslash selbst, wenn Sie ihn im Klartext benötigen. – Eric

+0

Um Ihre Frage zu verbessern, kann es hilfreich sein, wenn Sie etwas konkreter über das, was Sie probiert haben, sprechen und sowohl funktionierende als auch nicht funktionierende Ein-/Ausgaben zeigen. – Eric

Antwort

1

Ihre regex sollte wie folgt aussehen:

re.sub(r'\.[^.]*?\.$', '', someString) 

Dadurch wird sichergestellt, dass re.sub entspricht nur den Text zwischen den Perioden am Ende der Zeichenfolge. Ohne die $ wird jeder Satz passender Perioden in der Zeichenfolge übereinstimmen.

EDIT

Wenn Sie alles zwischen den Punkten erfassen möchten: \..*\.

+0

Zitat von der Frage: "etwas wie,' re ('. Dieser Text muss entfernt werden.', '', String) 'wird für mich nicht funktionieren" –

+0

@NiklasB .: Es funktioniert absolut gut für mich, Ich hatte gerade angenommen, dass der OP vergessen hatte, seinen Perioden zu entkommen. –

+0

Was OP damit gemeint ist, dass er den Text zwischen den Punkten nicht fest codieren kann, weil es anders sein könnte. Aber ja, es könnte fehlinterpretiert werden, also würde ich meinen Downvote entfernen, wenn Sie die Antwort bearbeiten würden, weil sie gesperrt ist. –

0

Sie haben vergessen, die . zu entkommen, und machte einige andere Fehler. Dies sollte funktionieren:

s = "the quick brown fox jumped over the moon.this text needs to be removed." 
s = re.sub("\..*\.", "", s) 
0

Wenn Sie dies mit regex einfach sub verwenden wollen.

>>> re.sub("\.this text needs to be removed\.","","the quick brown fox jumped over the moon.this text needs to be removed.") 
'the quick brown fox jumped over the moon' 

Aber Aufgabe so einfach, wie dies mit Python-String Funktionalität

>>> "the quick brown fox jumped over the moon.this text needs to be removed.".replace(".this text needs to be removed.","") 
'the quick brown fox jumped over the moon' 

Und allgemeiner Weise den letzten Satz geschehen würde entfernen

>>> re.sub("\.[^\.]+","","the quick brown fox jumped over the moon.this text needs to be removed.") 
'the quick brown fox jumped over the moon.' 

und ohne regex wäre

>>> ''.join("the quick brown fox jumped over the moon.this text needs to be removed.".rsplit('.',2)[:-2]) 
'the quick brown fox jumped over the moon' 
>>> 
+1

Zitat von der Frage: "etwas wie,' re ('. Dieser Text muss entfernt werden.', '', String) 'wird nicht für mich funktionieren" –

+0

@ Niklas, siehe mein Update. OP bearbeitet den Epilog später, nachdem alle untenstehenden Poster ihre Antwort geschrieben haben: – Abhijit

+0

@NiklasB .: Wenn ein Poster eine Frage/Antwort innerhalb von 5 Minuten nach einer Bearbeitung aktualisiert, erscheint es nicht in der Geschichte. Irgendwie habe ich es entweder vermisst oder es war nicht ihre mit dem ursprünglichen Beitrag, also Argumentpunkt auf dem :-) – Abhijit

1

Ich stimme abhijit zu, warum nicht einfach die String-Funktionen verwenden? Beispiel:

Während reguläre Ausdrücke sehr leistungsfähig sind, sind die Methoden für Zeichenfolgenobjekte oft auf Leistung optimiert.

1

Ihre Frage lesen, können Sie erreichen, was Sie wollen mit:

str = 'the quick brown fox jumped over the moon.this text needs to be removed.' 
str = str.split('.this text needs to be removed.', 1) 

print str[0] /* it prints "the quick brown fox jumped over the moon" */ 
+0

dieser Code ist schrecklich un-wiederverwendbar. Selbst wenn die Saite statisch bleibt (was ich bezweifle), ist die: 40 hart codiert, fehleranfällig und nicht universell. – hexparrot

+0

Sie haben Recht. Jetzt habe ich den Code repariert. –

Verwandte Themen