2017-09-11 4 views
3

Ich möchte einen Satz mit bestimmten Indikationen umformen. Genauer gesagt, würde Ich mag folgendes tun:Wie unterscheidet man "..." zu "." mit Python

sentence = "This is... a test." 
reshaped_sentence = "This is ... a test ." 

das ich ersetzen verwenden Sie dazu() Funktion:

sentence.replace("...", " ... ").replace(".", " . ") 

Aber ich erhalten die folgende:

reshaped_sentence = "This is . . . a test ." 

ich wirklich müssen unterscheiden ... von. in meinem Satz, also irgendeine Idee, wie man dieses Problem korrigiert?

+0

Offensichtlich wird die zweite ersetzen die erste –

+0

Wictors Antwort unten tun, was Sie brauchen, gegeben 1 oder 3 Perioden. Sind Sie sicher, dass Sie auch nicht mit [Unicode-Ellipsen] umgehen müssen (http://www.charbase.com/2026-unicode-horizontal-ellipsis)? – Jedi

+0

@Jedi im Moment bin ich nicht mit Unicode-Ellipsen beschäftigt, aber danke :) – Julian

Antwort

1

Sie können einen regulären Ausdruck verwenden, um entweder drei aufeinander folgende Punkte oder einen einzelnen Punkt mit 0 oder mehr Leerzeichen zu verbinden und diesen durch den mit Leerzeichen eingeschlossenen Übereinstimmungswert zu ersetzen. Um den nachgestellten oder anfänglichen Whitespace loszuwerden, rufen Sie einfach strip().

Siehe Python demo:

import re 
rx = r"\s*(\.{3}|\.)\s*" 
s = "This is... a test." 
print(re.sub(rx, r" \1 ", s).strip()) 
# => This is ... a test . 

Hier \s*(\.{3}|\.)\s* Streichhölzer

  • \s* - null oder mehr Leerzeichen
  • (\.{3}|\.) - Gruppe 1 (bezeichnet mit \1 aus dem Ersatz-Muster):
    • \.{3}-3 Punkte
    • | - oder
    • \. - ein einzelner Punkt
  • \s* - null oder mehr Leerzeichen

Siehe regex demo.

+0

Großartig! Vielen Dank, es scheint zu funktionieren :) Und jetzt, wenn ich nur "..." bearbeiten und "." Entfernen möchte, wie kann es erreicht werden? Mein Satz wäre: s = "Das ist ... ein Test" – Julian

+1

@Julian Da Sie Python 2.x verwenden, wird ein Lambda-Ausdruck in der Ersetzung benötigt. ['re (rx, lambda x: r" {} ".format (x.gruppe (1)) wenn x.gruppe (1) sonst" ", s) .strip()'] (https: // ideone.com/tjedvJ) –

+1

Dies ist einfach perfekt :) Vielen Dank für die Klarheit Ihrer Erklärungen – Julian

Verwandte Themen