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