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)

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

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

谢谢!

4

2 回答 2

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)
于 2013-05-14T22:41:46.173 回答
0

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

mod_data = data_content
for char in "#&/":
    mod_data = mod_data.replace(char, '')
于 2013-05-14T22:53:50.223 回答