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

Joa*_*nge 3 python regex string parsing

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

是否有一种优雅的方式来删除所有这些,所以我最终只有字母?

Ste*_*ski 13

特定

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

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

result = ''.join(c for c in s if c.isalpha())
Run Code Online (Sandbox Code Playgroud)

或过滤filter:

result = ''.join(filter(str.isalpha, s))    
Run Code Online (Sandbox Code Playgroud)

或者您可以使用re.sub以下空格替换非alpha的空格:

import re
result = re.sub(r'[^A-Za-z]', '', s)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`isalpha` 仅将 az 视为字母,而不是 å、ä、ö、ø、ñ、é 或 à (3认同)
  • 最快的方法是第二种(“filter”)。大约是其他人的2倍。第一个和第三个变体几乎相同,但“re”稍微慢一些。 (2认同)

Cu3*_*O42 6

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

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

string你的字符串在哪里,newstring是没有非字母字符的字符串。其作用是将每个非字母字符替换为空字符串,从而将其删除。但请注意,正则表达式在这里可能有点过大了。

更实用的方法是:

newstring = "".join(filter(str.isalpha, string))
Run Code Online (Sandbox Code Playgroud)

不幸的是,你不能只调用str一个filter对象将其转换为字符串,这看起来会更好......
采用Pythonic方式

newstring = "".join(c for c in string if c.isalpha())
Run Code Online (Sandbox Code Playgroud)