【问题标题】:Replace characters in a string with whitespaces用空格替换字符串中的字符
【发布时间】:2013-05-09 08:52:28
【问题描述】:

我正在编写一个简单的 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)

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

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

谢谢!

【问题讨论】:

    标签: python string replace translate


    【解决方案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)
    

    【讨论】:

    • Aaaa,这很有意义。感谢您指出了这一点!现在就像一个魅力。干杯。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多