2017-02-06 2 views
-1

ich Regex zu verwenden versuchen ‚Solo‘ (vordefinierte) Satzzeichen zu entfernen und in Folge punctiation Markierungen entfernen:Regex Match klar einziger Satz + reduzieren aufeinanderfolgende Satz

„ews von Almalki: Tornado, Überschwemmung Todesfälle erreichen 18 in us, mehr Stürme voraus“

zu

‚ews von Almalki Tornado Flut Todesfälle erreichen 18 in uns mehr Stürme voraus‘

Entfernen So ist die‚:‘weil sie nicht innerhalb eines Wortes enthalten ist, aber das "." in uns. wie in ist in einem Wort enthalten. Jedoch das "," nach u.s. sollte auch entfernt werden, da es sich um ein zweites Satzzeichen in Folge handelt.

Bisher habe ich den folgenden Code in Folge Satzzeichen zu entfernen:

import re 
r = re.compile(r'([.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+') 
n = r.sub(r'\1', "ews by almalki : Tornado, flood deaths reach 18 in U.s., more storms ahead ") 
print(n) 
+0

Ist es Python 3.5 +? –

+0

Ja, es ist Python 3.5. Das Tag wurde entsprechend aktualisiert. –

+0

Nun, es ist nicht ganz klar, aber wenn die Lösung unten seltsam funktioniert, können Sie versuchen, einen Punktblock 'pclass = '[.,/#! $%^& * ;: {} = _ \ zu definieren. '~() -] '' und dann das Muster als' r = re.compile (r '({0}) {0} + | (? <= \ s) {0} (? = \ s)' erstellen .format (pclass)) '. Der '(? <= \ S) {0} (? = \ S) 'Teil wird nur mit einem einzelnen Interpunktionssymbol übereinstimmen, das mit Leerzeichen verbunden ist. –

Antwort

0

Änderung Ihrer RegexMuster es sollte dies beheben

r = re.compile(r'([\s.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+')