String.translate对面

时间:2015-10-08 12:42:04

标签: python string

我是python的新手,想知道是否有与string.translate()的相反 我想将我的函数传递给一个长字符串,但是只能保留字母表中的字母并过滤掉其余的字母! (注意我很可能需要将我需要的内容扩展为逗号和句点,因此任何预先构建的过滤方法都会有所帮助!)

更新

我有一个暴力版本,但这是非常不受欢迎的

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

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。

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

如果您想保留空格,只需将正则表达式更改为:

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

答案 1 :(得分: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()])

答案 2 :(得分:0)

我建议使用列表理解的解决方案。

DoFoo

答案 3 :(得分:0)

简单的生成器理解和str.join方法:

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