用空格替换字符串中的字符

时间:2013-05-14 22:35:54

标签: python string replace translate

我正在编写一个简单的Python脚本,用于检索任何Twitter用户的最新推文(在本例中为BBC),并使用Mac上的集成文本转语音系统来读出该特定推文的内容。

一切都在按预期运行,但有些事情我想改进。例如,如果推文包含字符“#”,则计算机将其称为“数字”。例如,如果推文上写着“#BBC涵盖了最新消息”,那么计算机会说“BBC编号涵盖最新消息”。

我已经声明了一个字符串来保存推文的内容,并希望找到一种用白色空格替换不需要的字符的方法。到目前为止,我有以下内容:

for char in data_content: #data_content is the string holding the tweet
    if char in "#&/": # does not replace #
        mod_data = data_content.replace(char, '')
print(mod_data)
system('say ' + mod_data)

这似乎与“/”字符一起正常工作,但不替换“#”字符。所以,非常感谢任何有关此事的帮助!

P.S。我试过单独替换“#”字符,在这种情况下我得到了想要的结果。但是,当我尝试提供一系列要替换的字符时,它只替换“/”字符。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的循环始终将data_content转换为mod_data,因此您始终只能看到最后一次更改。

说你的字符串是"#BBC covers the latest issues with G&F. See bbc.co.uk/gf"

首次找到列表中的字符为#所以:

mod_data = "BBC covers the latest issues with G&F. See bbc.co.uk/gf"

接下来找到了&,但它在data_content中找到,因此您之前所做的更改将被忽略,您将获得:

mod_data = "#BBC covers the latest issues with GF. See bbc.co.uk/gf"

找到/后会发生同样的事情:

mod_data = "#BBC covers the latest issues with G&F. See bbc.co.ukgf"

这就是为什么它看起来只适用于/

您可以使用这样的正则表达式执行您想要的操作:

import re

string = "#BBC covers the latest issues with G&F. See bbc.co.uk/gf"
mod_data = re.sub(r"[#&/]", " ", string)
print(mod_data)
system('say ' + mod_data)

答案 1 :(得分:0)

我还有一个建议。由于replace()适用于字符串中所有出现的字符,因此您不需要该外部循环,因此您可以将代码更改为以下内容:

mod_data = data_content
for char in "#&/":
    mod_data = mod_data.replace(char, '')