有没有办法删除除Python中字符串中的字母以外的所有字符?

时间:2014-04-17 19:54:02

标签: python regex string parsing

我调用一个函数,返回包含各种字符的代码,范围从(到",和,和数字。

有没有一种优雅的方法来删除所有这些,所以我最终只得到字母?

7 个答案:

答案 0 :(得分:9)

鉴于

s = '@#24A-09=wes()&8973o**_##me'  # contains letters 'Awesome'    

您可以使用生成器表达式过滤掉非字母字符:

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

或使用filter过滤:

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

或者您可以使用re.sub

替换非空格的空格
import re
result = re.sub(r'[^A-Za-z]', '', s)

答案 1 :(得分:3)

使用RegExes的解决方案非常简单:

import re
newstring = re.replace(r"[^a-zA-Z]+", "", string)

string是您的字符串,而newstring是没有字母的字符串。这样做是用空字符串替换不是字母的每个字符,从而将其删除。但请注意,RegEx在这里可能略显过分。

更具功能性的方法是:

newstring = "".join(filter(str.isalpha, string))

不幸的是,您不能只在str对象上调用filter将其转换为字符串,这看起来会更好...... 它将采用pythonic方式

newstring = "".join(c for c in string if c.isalpha())

答案 2 :(得分:2)

你没有提到你只想要英语字母,这是一个国际解决方案:

import unicodedata

str = u"hello, ѱϘяԼϷ!"
print ''.join(c for c in str if unicodedata.category(c).startswith('L'))

答案 3 :(得分:1)

>>> import re
>>> string = "';''';;';1123123!@#!@#!#!$!sd         sds2312313~~\"~s__"
>>> re.sub("[\W\d_]", "", string)
'sdsdss'

答案 4 :(得分:0)

这是另一个,使用string.ascii_letters

>>> import string
>>> "".join(x for x in s if x in string.ascii_letters)

`

答案 5 :(得分:0)

s = '@#24A-09=wes()&8973o**_##me'

print(filter(str.isalpha, s))

# Awesome

关于filter的返回值:

filter(function or None, sequence) -> list, tuple, or string

答案 6 :(得分:0)

嗯,我在这种情况下自己用这个

对不起,如果它已经过时了:)

string = "The quick brown fox jumps over the lazy dog!"
alphabet = "abcdefghijklmnopqrstuvwxyz"

def letters_only(source):
    result = ""
    for i in source.lower():
        if i in alphabet:
            result += i
    return result

print(letters_only(string))