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

新手上路,请多包涵

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

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

原文由 Joan Venge 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 631
2 个回答

鉴于

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)

原文由 Steven Rumbalski 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

一个更实用的方法是:

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

不幸的是,您不能只在 filter 对象上调用 str 将其转换为字符串,这样看起来会好得多…

以 pythonic 方式进行

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

原文由 Cu3PO42 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题