在Python中,有办法去掉字符串中所有非字母字符吗?

14 投票
7 回答
48421 浏览
提问于 2025-04-18 03:10

我调用了一个函数,这个函数返回的代码里面有各种各样的字符,从括号(()到引号("),还有逗号(,)和数字。

有没有什么简单的方法可以把这些字符都去掉,最后只留下字母呢?

7 个回答

1

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实很多时候,解决方案就在我们身边,只需要仔细观察和理解。

比如说,当你在写代码的时候,可能会发现某些功能没有按照预期工作。这时候,你可以尝试检查一下你的代码,看看是否有拼写错误,或者某些地方的逻辑是否正确。

另外,参考一些在线社区,比如StackOverflow,能够帮助你找到类似的问题和解决方案。很多时候,其他人也遇到过相同的情况,他们的经验和建议可以为你提供很大的帮助。

总之,遇到问题时不要慌张,保持冷静,仔细分析,必要时寻求帮助,这样你就能更快地找到解决办法。

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

这里还有一个例子,使用了 string.ascii_letters

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

`

3

你没有提到你只想要英文字母,这里有一个国际化的解决方案:

import unicodedata

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

这里用正则表达式(RegEx)来解决问题非常简单:

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

在这里,string是你要处理的字符串,而newstring是去掉了非字母字符后的字符串。这个方法的作用是把每个不是字母的字符替换成空字符串,也就是把它们删除。不过要注意,使用正则表达式在这里可能有点过于复杂了。

一种更简单的做法是:

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

不幸的是,你不能直接对filter对象使用str来把它转换成字符串,这样看起来会更好看……
按照Python的风格,做法是这样的:

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

给定

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)

撰写回答