从字符串中删除字母表以外的所有字符的最佳方法是什么?我的意思是,删除所有空格、标点符号、括号、数字、数学运算符..
例如:
input: 'as32{ vd"s k!+'
output: 'asvdsk'
您可以使用
re
,但实际上并不需要。
>>> s = 'as32{ vd"s k!+'
>>> ''.join(x for x in s if x.isalpha())
'asvdsk'
>>> filter(str.isalpha, s) # works in python-2.7
'asvdsk'
>>> ''.join(filter(str.isalpha, s)) # works in python3
'asvdsk'
如果你想使用正则表达式,这应该更快:
import re
s = 'as32{ vd"s k!+'
print(re.sub('[^a-zA-Z]+', '', s))
打印
'asvdsk'
这是一种使用 ASCII 范围来检查字符是否在大写/小写字母表中的方法(如果是,则将其附加到字符串中):
s = 'as32{ vd"s k!+'
sfiltered = ''
for char in s:
if((ord(char) >= 97 and ord(char) <= 122) or (ord(char) >= 65 and ord(char) <= 90)):
sfiltered += char
变量
sfiltered
将显示结果,即预期的'asvdsk'
。
这个简单的表达式可以获取所有字母,包括非 ASCII 字母 ok t áàãéèêçĉ...以及多种语言中使用的更多字母。
r"[^\W\d]+"
它的意思是“获取一个或多个字符的序列,这些字符既不是“非单词字符”也不是数字。
如果您想保留世界各地许多语言中使用的类似 áàãéèêçĉ 的字符,请尝试以下操作:
import re
print re.sub('[\W\d_]+', '', yourString)
作为替代方法,可以使用 Alphabetic 包,它提供了用于此目的的函数。
首先通过 pip install alphabetic
安装
package,然后 请按以下步骤操作:
from alphabetic import WritingSystem, JsonUtils
input_str = 'as32{ vd"s k!+'
ws = WritingSystem()
ws.strip_non_script_characters(input_str,
ws.Language.English,
process_token_wise=False)
这样你就会得到想要的输出:
'asvdsk'
注意:如果
ws.Language.English
未作为参数传递,则会考虑所有 支持的语言 (>150) 的所有字符。