2013-05-14 1 views
0

Я пишу простой скрипт Python, который извлекает последнюю информацию о любом твиттере пользователя (в данном случае 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

Аааа, что делает много смысла. Спасибо что подметил это! Теперь работает как шарм. Приветствия. – northerner

0

У меня есть дополнительное предложение. Так replace() работ для всех вхождений символа в строке, вам не нужен, что внешний контур, так что вы можете изменить свой код, чтобы что-то вроде этого:

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