2016-11-04 6 views
-1

文字列のスペースで置き換えるシンボルのリストがあります。whileループ内のString.replaceが決して停止しない

useless = ['.', ',', '!', '?', ':', '(', ')', '"', '[', ']'] 
message = 'Whatever. you; "want:)' 

for sign in useless: 
    while message.find(sign): 
     message.replace(sign, ' ') 

これは決して停止しない無限ループになり: はここに私のコードです。 これはおそらく簡単なことですが、私はかなり長い時間今それをしています。 何か助けがあれば、ありがとう。

+2

'メッセージ= message.replace(記号を、 '「)を参照' string.replaceの場所で動作するが、文字列がPythonで不変であるように修飾された文字列を返していません。 – sberry

答えて

5

message.replace()は、文字列を変更しません(Pythonでは、文字列は変更不可能です。つまり、インプレースで変更することはできません)。 mesage.replace(sign, ' ')messageを再割り当てすることに加えて

message = message.replace(sign, ' ') 

(また別のバグのためのフランシスコCouzoの回答を参照してください。)

+0

それだけです!あなたとあなたのFrancisco Couzoの答えはどちらもそれでした、ありがとう! – Ben

3

message.find(sign)戻っ-1それができない場合:

あなたが探していることです真実である文字列を見つけてください。

sign in messageと交換してください。

+0

よく目をつけた(+1)。 – NPE

+0

良い点は、入力メッセージの先頭にある「置換」文字も時期尚早に終了することです。 – sberry

0

ループの代わりに正規表現を試すことができます。

>>> import re 
>>> p = '[.,!?:";()\[\]]' 
>>> message = 'Whatever. you; "want:)' 
>>> re.sub(p, ' ', message) 
'Whatever you want ' 

述べたように、replaceは、値を返すインプレース更新されません。ご覧のとおり、re.subと同じです。関連する読み取りのため

Ways to strip punctuation from a string in Python

+2

'could'は 'should' IMOよりも適切でしょう... – Julien

関連する問題