2013-05-14 94 views
0

我正在编写一个简单的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.我试图单独替换“#”字符,在这种情况下,我得到了期望的结果。但是,当我尝试提供一系列要替换的字符时,它只替换“/”字符。

谢谢!

回答

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) 
+0

AAAA,这使得有很大的意义。感谢您指出了这一点! 现在工作就像一个魅力。干杯。 – northerner

0

我有一个额外的建议。由于replace()作品为字符串中的字符所有出现,你不需要那么外环,所以你可以像这样的代码更改为:

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