2015-10-08 2 views
0

Я новичок в python и задавался вопросом, была ли противоположность string.translate() Я хочу передать свою функцию длинной строкой, но уметь сохранить только буквы в алфавите и отфильтровать отдых ! (Обратите внимание, я, скорее всего, нужен расширить, что мне нужно, чтобы отфильтровать в запятые и периоды, следовательно, любой предварительно построен метод фильтра будет полезен!)String.translate напротив

UPDATE

У меня есть грубая версия силы, но это крайне нежелательно

def filterFunction(text): 
    text.split 
    filteredtext=([elem for elem in text if elem.isalpha()==True or elem==","or elem=="."or elem==" "]) 
    print filteredtext 
    return filteredtext 
+0

Какая версия Python вы используете? –

+0

У меня версия грубой силы, но это крайне нежелательный фильтр defFunction (текст): text.split отфильтрованный текст = ([elem для текста в элементе if elem.isalpha() == True или elem == "," или elem == "." или elem == ""]) print filtertext return filtertext –

ответ

1

Для этого вы можете использовать регулярные выражения.

import re 
myString = re.sub("[^a-zA-Z]", "", myString) 

В случае, если вы хотите сохранить пробелы тоже, просто изменить регулярное выражение:

myString = re.sub("[^a-zA-Z ]", "", myString) 
+0

Regex будет вариантом, но я хотел бы продолжить это позже, чтобы фильтровать запятые и периоды –

+0

Вы имеете в виду фильтрацию только запятых и периодов? Это можно сделать и с помощью регулярных выражений: 're.sub (" [\. |,] "," ", MyString)'. –

+0

Я имел в виду в дополнение к запятым и периодам фильтра алфавита. –

0

Я предлагаю решение, используя список понимание.

"".join([i for i in s if i.isalpha()]) 

s = "Hello World" 
"".join([i for i in s if i.isalpha()]) #HelloWorld 
s = "1234532 32132" 
"".join([i for i in s if i.isalpha()]) # '' 
1

Вы можете использовать регулярное выражение, как предлагается в других ответах, или вы можете сами перебирать символы.

Вы можете использовать string.isalpha метод, чтобы проверить, является ли символ алфавита

myString = filter(lambda char: char.isalpha(), myString) 

Хотя в python3 вам нужно это по-другому, так как фильтр возвращает итератор

myString = ''.join(list(filter(lambda char: char.isalpha(), myString))) 

или простой список понимание

myString = ''.join([char for char in myString if char.isalpha()]) 
0

Простой генератор понимание и метод str.join:

tested_str = "s12jf#@GDVC2" 
expected = "sjfGDVC" 
result = ''.join(c for c in tested_str if c.isalpha()) 
assert result == expected 
+0

Но это должно работать для функции, которая будет получать несколько параметров строки. Я не могу жестко кодировать ожидаемое все время. –