繁体   English   中英

删除Python中不在集合中的字符

[英]Remove characters not in a set in Python

我有一个字符串,我正在尝试删除所有非字母数字字符集也不包含在此字符集中的字符

'''!$%*()_-=+\/.,><:;'"?|'''.

我知道这会删除所有非字母数字字符,但是我该怎么做呢?

re.sub(r'\W+','',line)

Python 2.x非正则表达式解决方案:

punctuation = '''!$%*()_-=+\/.,><:;'"?|'''
allowed = string.digits + string.letters + punctuation
filter(allowed.__contains__, s)

要过滤的字符串是s (这可能不是长字符串的最快解决方案。)

归功于此线程: 从python中的字符串中删除特定字符

首先,无需手动重新键入所有标点符号。 为了方便起见,字符串模块将string.punctuation定义为属性。 (使用help(string)查看其他可用的类似定义)

>>> import string
>>>string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

该解决方案的确切应用将需要花一些时间来定义不想要的字符。 一个很大的缺点是,在这种形式下,它只会删除您要求删除的字符。 如果确定文件是100%ASCII字符,则可以定义:

>>> delchars = ''.join(c for c in map(chr, range(256)) if c not in (string.punctuation + string.digits + string.letters) )

您可以通过丢弃字符来过滤字符:

>>> text.translate(None, delchars)

编辑:这是各种方法的一些有趣的计时信息: 从Python的字符串中剥离除字母数字字符外的所有内容

在Python 3.x中,可以对字符串使用translate方法来删除不需要的字符:

>>> def remove(string, characters):
        return string.translate(str.maketrans('', '', characters))

>>> import string
>>> remove(string.printable, string.ascii_letters + string.digits + \
                             '''!$%*()_-=+\/.,><:;'"?|''')
'#&@[]^`{}~ \t\n\r\x0b\x0c'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM