2017-05-12 5 views
1

Was ist der saubere Weg in Python, um diese einfache Textfixierung zu tun - zu prüfen, ob jeder Punkt (außer dem letzten) von Leerzeichen gefolgt wird. Angenommen, ein Punkt, dem kein leerer Platz folgt, ist der einzige mögliche Fehler, den wir in der Eingabezeichenfolge erhalten können.Fügen Sie Platz nach Pausen hinzu

Ich tue dies:

def textFix(text): 
    result = re.sub('\.(?!\s)', '. ', text) 
    if (result[len(result) - 1]) == ' ': 
     return result[:-1] 
    return result 

Antwort

2

Sie es

\.(?!\s|$) 

mit

überprüfen können die regex demo See. Es entspricht einem Punkt, auf den kein Whitespace oder Stringende folgt, dh jeder nicht abschließende Punkt, der kein Whitespace enthält. mit einem nicht-Leerzeichen char

Oder Sie auch

\.(?=\S) 

betrachten können, gefolgt jeden Punkt übereinstimmen.

Siehe .

Python demo:

import re 
rx = r"\.(?=\S)" 
s = "Text1. Text2.Text3." 
result = re.sub(rx, ". ", s) 
print(result) 
# => "Text1. Text2. Text3." 
+0

BTW, die '\. (? = \ S)' bevorzugt, da es schneller durch Arbeiten in dem Look-Ahead zu keinem Wechsel. –

+0

wow, '\. (? = \ S)' ist viel schneller! Danke für das Teilen :) – degant

1

Ihre Technik sieht perfekt aus. Aber auch einen Kontrollraum zu vermeiden Zugabe nach dem letzten Punkt (.)

\.(?!\s)(?!$) 

wo (?!$) sicher hilft machen, wenn die . von Ende der Zeichenfolge folgt $ dann wird nicht abgestimmt und so ist kein Platz, nachdem er hinzugefügt .

Regex 101 demo

Verwandte Themen