2016-09-05 2 views
-1

Как определить символы (в СПИСОК или STRING) и заменить любые другие символы .. позволяет сказать '?'Замена неизвестных символов в строке Python 2.7

Пример:

strinput = "abcdefg#~" 
legal = '.,/?~abcdefg' #legal characters 
while i not in legal: 
    #Turn i into '?' 
print output 
+1

Будет ли любой персонаж, которого вы хотите сохранить, не является ASCII? –

+0

«Мой вопрос в том, как я могу определить символы (в LIST или STRING) и заменить любые другие символы .. позволяет сказать«? »« Почему вы используете список или строку? Кажется, это отличная работа для дикта, если вы собираетесь использовать такой простой подход. Не определено? Поймайте «KeyError» и справитесь с ним. –

+0

Как я могу использовать словарь, если я не знаю символов, которые я не могу использовать? @ Two-BitAlchemist – Cyanite

ответ

4

Поместите правовые символы в наборе затем использовать in для проверки каждого символа строки. Постройте новую строку с помощью метода str.join() и conditional expression.

>>> s = "test.,/?~abcdefgh" 
>>> legal = set('.,/?~abcdefg') 
>>> s = ''.join(char if char in legal else '?' for char in s) 
>>> s 
'?e??.,/?~abcdefg?' 
>>> 
1

Если это большой файл, прочитать на куски, и применять re.sub(..), как показано ниже. ^ внутри класса (квадратные скобки) означает отрицание (подобно тому, «ничего другого, кроме»)

>>> import re 
>>> char = '.,/?~abcdefg' 
>>> re.sub(r'[^' + char +']', '?', "test.,/?~abcdefgh") 
'?e??.,/?~abcdefg?' 
+0

Извините, я забыл упомянуть, что я не буду редактировать файл напрямую, а вместо этого содержимое будет сохранено в строке. Я редактировал свой вопрос. – Cyanite

+2

Почти все ответы здесь, на StackOverflow, являются общими. Я уверен, что вы можете принять идею 're.sub (..)' далее .. – SuperSaiyan

+0

@AustinSmith - это выполняет то, что вам нужно. – wwii