Python:仅保留字符串中的字母

问题描述 投票:0回答:6

从字符串中删除字母表以外的所有字符的最佳方法是什么?我的意思是,删除所有空格、标点符号、括号、数字、数学运算符..

例如:

input: 'as32{ vd"s k!+'
output: 'asvdsk'
python python-2.7
6个回答
67
投票

您可以使用

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'

41
投票

如果你想使用正则表达式,这应该更快:

import re
s = 'as32{ vd"s k!+'
print(re.sub('[^a-zA-Z]+', '', s))

打印

'asvdsk'


4
投票

这是一种使用 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'


0
投票

这个简单的表达式可以获取所有字母,包括非 ASCII 字母 ok t áàãéèêçĉ...以及多种语言中使用的更多字母。

r"[^\W\d]+"

它的意思是“获取一个或多个字符的序列,这些字符既不是“非单词字符”也不是数字。


0
投票

如果您想保留世界各地许多语言中使用的类似 áàãéèêçĉ 的字符,请尝试以下操作:

import re
print re.sub('[\W\d_]+', '', yourString)

0
投票

作为替代方法,可以使用 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) 的所有字符。

© www.soinside.com 2019 - 2024. All rights reserved.