2017-02-05 6 views
-1

Wie verwende ich RegEx (oder etwas anderes in Python) für die folgende Anforderung? Ich muss:Python RegEx, um Zeichenfolge zu ersetzen

  1. das Wort entfernen „Traum“ (einschließlich aller Stämme)
  2. Alle vorherigen Wörter entfernen (dh alle Wörter hinter dem Wort „Traum“)
  3. Entfernen Sie das Wort daneben (davor/rechts von "dream")
  4. Das Wort "to" aus allen Phrasen entfernen.

Eingang:

text = ["Dream of a car", 
     "Dream to live in a world", 
     "Dream about 8am every morning", 
     "stopped dreaming today", 
     "still dreaming of a car", 
     "One more dream to come late tomorrow", 
     "Dream coming to hope tomorrow"] 

Erforderliche Leistung:

["a car", 
"live in a world", 
"8am every morning", 
" ", 
"a car", 
"come late tomorrow", 
"hope tomorrow"] 

Ich habe versucht:

result = [re.sub('Dream', '', a) for a in text] 

# MyOutput 
[' of a car', ' to live in a world', ' about 8am every morning', 'stopped dreaming today', 'still dreaming of a car', 'One more dream to come late tomorrow', ' coming to hope tomorrow'] 
+1

Die Lösung, die Sie vorschlagen können, immer nur tun die Hälfte Ihrer ersten Anforderung entfernen möchten, und nicht einmal * Versuch * den Rest zu adressieren. – jonrsharpe

+0

ja Ich weiß nicht, wie man den Rest erledigt :( –

+0

Auch die Ausgabe, die Sie behaupten, stimmt nicht mit Ihrer Eingabe. – jonrsharpe

Antwort

0

Ist dies Ihre gewünschte Ausgabe gibt

result = [re.sub(r'\bto\b *', '', re.sub(r'^.*Dream[^ ]* *[^ ]* *', '', a, flags=re.I)) for a in text] 

Wenn Sie nur die an an der Front

result = [re.sub(r'^.*Dream[^ ]* *[^ ]* *(\bto\b)? *', '', a, flags=re.I) for a in text] 
+0

das entfernt nicht das Wort "zu" wie in Punkt 4 angegeben –

+0

Whoops, habe ich vergessen, müssen Sie entfernen es nur am Anfang des neuen Textes oder überall? Was ist mit "Dream of running to school"? Sollte es "running school" oder "running to school"? – koalo

+0

Können Sie bitte den Code für beide Fälle schreiben. –

Verwandte Themen