python lambda,过滤掉非字母字符

时间:2011-02-23 21:05:31

标签: python lambda

我试图只保留字符串中的字母。我想做这样的事情:

s = '1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh'
s_ = lambda: letter if letter.isalpha(), s

这个错误了。工作版看起来怎么样?

7 个答案:

答案 0 :(得分:4)

怎么样

re.sub('[^a-zA-Z]','', s)

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

答案 1 :(得分:4)

可替换地:

s_ = filter(lambda c: c.isalpha(), s)

答案 2 :(得分:3)

操纵字符串的一种方法是使用生成器函数和join方法:

result = "".join( letter for letter in s if letter.isalpha() )

答案 3 :(得分:2)

您不需要lambda函数:

result = ''.join(c for c in input_str if c.isalpha())

如果确实想要使用lambda函数,可以按如下方式编写:

result = ''.join(filter(lambda c:str.isalpha(c), input_str))

但这也可以简化为:

result = ''.join(filter(str.isalpha, input_str))

答案 4 :(得分:1)

你可能想要一个列表理解:

s_ = [letter for letter in s if letter.isalpha()]

但是,这将为您提供一个字符串列表(每个字符长一个)。要将其转换为单个字符串,您可以使用join

s2 = ''.join(s_)

如果需要,可以将两者合并为一个语句:

s_ = ''.join(letter for letter in s if letter.isalpha())

如果您特别想要或需要使用lambda函数,可以使用filter代替生成器:

my_func = lambda letter: letter.isalpha()
s_ = ''.join(filter(my_func, s))

答案 5 :(得分:0)

>>> s = '1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh'
>>> ''.join(e for e in s if e.isalpha())
'udsfsdfqhhiHHHdgh'

答案 6 :(得分:0)

这是一个很长的路,但是可以让你为任意一组字符创建一个过滤器。

import string

def strfilter(validChars):
    vc = set(validChars)
    def filter(s):
        return ''.join(ch for ch in s if ch in vc)
    return filter

filterAlpha = strfilter(string.letters)
filterAlpha('1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh')  # -> 'udsfsdfqhhiHHHdgh'