2016-04-28 5 views
1

So etwas wieGibt es eine Möglichkeit, den String ersetzen() Methode zu verwenden, etwas

sentence.replace(*, "newword")

(was übrigens nicht funktioniert) ersetzen

die

sentence = "hello world" return sentence.replace(*, "newworld")

sagen lassen

sollte "newword newword" zurückgeben

+0

Was würde 'sentence.replace (*," newword ")' zurück? – vaultah

+0

Sagen wir "Satz =" Hallo Welt "', dann sollte es zurückkehren "Satz =" newword newword "' – anquadros

+1

Versuchen Sie 'sentence = '' .join (['newword'] * len (sentence.split()))' – vaultah

Antwort

5

Da Sie kein bestimmtes Wort ersetzen werden, unterstützt str.replace() keine Mustererkennung.

Sie können jedoch die re.sub() Funktion verwenden, die Sie in einem regulären Ausdruck passieren lassen soll, dass alles passen würde und es ersetzen:

import re 
# Replace each series of non-space characters [^\s]+ with "newword" 
sentence = re.sub('[^\s]+','newword',sentence) 

Beispiel

Sie können eine complete interactive example of this here finden und unten gezeigt:

enter image description here

+0

Dumme Finger. Danke, ich habe es entsprechend angepasst. –

+0

Danke, Rion! – anquadros

0

Was Sie suchen, ist ein Wort ersetzen. Anstelle von string.replace, das Zeichen ersetzt, möchten Sie etwas, das alle Wörter ersetzt.

>>> sentence = "hello world this is my sentence" 
>>> " ".join(["newword"] * len(sentence.split())) 
'newword newword newword newword newword newword' 

Im obigen Fall sind spiting wir den Satz in eine Liste von seinen Worten und einfach eine andere Liste von Wörtern „NEWWORD“ von gleicher Länge zu machen. Schließlich sind wir in zwischen ihnen

+0

Danke, Slick! – anquadros

0

die neuen Wörter zusammen mit dem „“ Charakter verbinden Wenn du auf Geschwindigkeit, sondern nur die Zeichenfolge Crafting scheint manuell doppelt so schnell zu sein:

In [8]: import re 

In [9]: sentence = "hello world this is my sentence" 

In [10]: nonspace = re.compile('[^\s]+') 

In [11]: %timeit re.sub(nonspace, 'newword', sentence) 
100000 loops, best of 3: 6.28 µs per loop 

In [12]: %timeit ' '.join('newword' for _ in xrange(len(sentence.split()))) 
100000 loops, best of 3: 2.52 µs per loop 

In [13]: sentence *= 40 # Make the sentence longer 

In [14]: %timeit re.sub(nonspace, 'newword', sentence) 
10000 loops, best of 3: 70.6 µs per loop 

In [15]: %timeit ' '.join('newword' for _ in xrange(len(sentence.split()))) 
10000 loops, best of 3: 30.2 µs per loop 

Und join ist eigentlich faster when you hand it a list, also ' '.join(['newword' for _ in xrange(len(sentence.split()))]) sollte zu einigen Leistungsverbesserungen führen (es speichert das Ergebnis in meinen informellen %timeit Tests, also habe ich es nicht aufgenommen)

+0

Danke, Jayelm! – anquadros

Verwandte Themen