我有一个字符串,我正在尝试删除所有不是字母数字的字符,也不是这个集合中的字符
'''!$%*()_-=+\/.,><:;'"?|'''.
我知道这会删除所有非字母数字字符,但我怎样才能做得更好?
re.sub(r'\W+','',line)
Python 2.x 非正则表达式解决方案:
punctuation = '''!$%*()_-=+\/.,><:;'"?|'''
allowed = string.digits + string.letters + punctuation
filter(allowed.__contains__, s)
要过滤的字符串是s
. (这可能不是长字符串最快的解决方案。)
归功于这个线程:Remove specific characters from a string in python
首先,无需手动重新输入所有标点符号。为了方便起见, string 模块将 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
string 上的方法来删除不需要的字符:
>>> 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'