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

Posted

技术标签:

【中文标题】有没有办法删除Python中字符串中除字母之外的所有字符?【英文标题】:Is there a way to remove all characters except letters in a string in Python? 【发布时间】:2014-06-02 06:18:08 【问题描述】:

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

有没有一种优雅的方法可以删除所有这些,所以我最终只剩下字母?

【问题讨论】:

嘿看看这个链接有人有类似的问题! ***.com/questions/12851791/… 为什么我的评论被删除了?我看到像 Jon Skeet 这样的人在这里询问类似的事情,这是有效的。 【参考方案1】:

给定

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)

【讨论】:

哇非常漂亮。我真的很喜欢 python 有这样优雅的解决方案。 请注意,isalpha 仅将 a-z 视为字母,而不是 e.g. å、ä、ö、ø、ñ、é 或 à【参考方案2】:

这是另一个,使用string.ascii_letters

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

`

【讨论】:

【参考方案3】:

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

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

string 是您的字符串,newstring 是没有非字母字符的字符串。这样做是将每个不是字母的字符替换为空字符串,从而将其删除。但是请注意,RegEx 在这里可能有点矫枉过正。

更实用的方法是:

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

不幸的是,您不能只在 filterobject 上调用 str 将其转换为字符串,这样看起来会更好... 走蟒蛇式的方式

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

【讨论】:

应该是re.subre.replace不存在。 你说的太对了,我实际上只是查了一下,因为我不确定 Python 库,但最终还是输入了错误的名称......【参考方案4】:
>>> import re
>>> string = "';''';;';1123123!@#!@#!#!$!sd         sds2312313~~\"~s__"
>>> re.sub("[\W\d_]", "", string)
'sdsdss'

【讨论】:

这会留下下划线。 哦!是的,它留下了下划线。编辑了答案以删除下划线。【参考方案5】:

您没有提到您只需要 英文 个字母,这是一个国际解决方案:

import unicodedata

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

【讨论】:

【参考方案6】:
s = '@#24A-09=wes()&8973o**_##me'

print(filter(str.isalpha, s))

# Awesome

关于filter的返回值:

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

【讨论】:

【参考方案7】:

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

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

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))

【讨论】:

以上是关于有没有办法删除Python中字符串中除字母之外的所有字符?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 删除字符串中除数字之外的所有内容

如何用C语言将字符串中除字母的其他符号删除

python 获取类中除内置方法外的所有方法名

如何与正则表达式匹配PHP中除“-”之外的所有特殊字符?

删除 VIM 中除第一列之外的所有内容

如何删除 Core Data 存储中除一个对象之外的所有对象?