在Python中,有办法去掉字符串中所有非字母字符吗?
我调用了一个函数,这个函数返回的代码里面有各种各样的字符,从括号(()到引号("),还有逗号(,)和数字。
有没有什么简单的方法可以把这些字符都去掉,最后只留下字母呢?
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)