Python String.translate相反

Python String.translate相反,python,string,Python,String,我是python新手,想知道string.translate()是否有对立面 我想给我的函数传递一个长字符串,但只能保留字母表中的字母,并过滤掉其余的!(请注意,我很可能需要将需要过滤的内容扩展为逗号和句点,因此任何预构建的过滤方法都会很有帮助!) def filterFunction(text): text.split filteredtext=([elem for elem in text if elem.isalpha()==True or elem==","or elem

我是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
更新

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

我有一个暴力版本,但这是非常不可取的

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

你可以使用正则表达式

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
import re
myString = re.sub("[^a-zA-Z]", "", myString)
如果您也想保留空白,只需将正则表达式更改为:

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
myString = re.sub("[^a-zA-Z ]", "", myString)

我提出了一个使用列表理解的解决方案

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
"".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()]) # ''

您可以按照其他答案中的建议使用正则表达式,也可以自己循环使用字符

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
您可以使用
string.isalpha
方法检查字符是否为字母表

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
myString = filter(lambda char: char.isalpha(), myString)
尽管在
python3
中,由于过滤器返回迭代器,所以需要对其进行不同的修改

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
myString = ''.join(list(filter(lambda char: char.isalpha(), myString)))
还是简单的列表理解

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
myString = ''.join([char for char in myString if char.isalpha()])

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

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
tested_str = "s12jf#@GDVC2"
expected = "sjfGDVC"
result = ''.join(c for c in tested_str if c.isalpha())
assert result == expected

您使用的是哪个Python版本?我有一个暴力版本,但这是非常不受欢迎的def filterFunction(text):text.split filteredtext=([elem for elem in text if elem.isalpha()==True或elem==”,“或elem==”,或elem==”)打印过滤器文本返回过滤器文本将是一个选项,但我想稍后扩展此选项以过滤逗号和句点您的意思是只过滤逗号和句点吗?正则表达式也可以这样做:
re.sub(“[\.\124;,]”,“,”,myString)
。我的意思是除了字母过滤器逗号和句点之外。我不确定我是否理解正确:你想保留字母表,逗号,和句点,并删除所有其他内容?是的,因此给定一个字符串$John_Blake,当函数检测到$and_u不是字母表或逗号或句点的一部分时,该函数返回JohnBlake,但这必须适用于将接收多个字符串参数的函数,我无法一直硬编码预期的参数。