while循环中的String.replace永远不会停止

时间:2016-11-04 21:57:28

标签: python

我有一个符号列表,我想用字符串中的空格替换。 这是我的代码:

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

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

这导致永不停止的无限循环。 它可能很容易,但我已经很长时间了。 任何帮助都会很棒,谢谢。

3 个答案:

答案 0 :(得分:5)

message.replace()没有修改字符串(在Python中,字符串是不可变的,这意味着你无法就地修改它们。)

您正在寻找的是:

message = message.replace(sign, ' ')

(另请参阅Francisco Couzo对另一个错误的回答。)

答案 1 :(得分:3)

除了必须将message重新分配给mesage.replace(sign, ' ')之外,message.find(sign)如果无法找到字符串,则返回-1

将其替换为:sign in message

答案 2 :(得分: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