Python - 如何从字符串中删除隐藏的符号?

时间:2011-08-22 12:22:49

标签: python

有时候我有一个带有奇怪字符的字符串。它们在浏览器中不可见,但是是字符串的一部分,并以len()计算。 我怎么能摆脱它? Strip()删除正常空格但不删除那些符号。

4 个答案:

答案 0 :(得分:12)

使用string模块中的字符类别。如果要允许所有可打印字符,可以执行

from string import printable
new_string = ''.join(char for char in the_string if char in printable)

根据您的回答,您也可以使用re.sub执行此操作:

new_string = re.sub("[^{}]+".format(printable), "", the_string)

另外,如果你想查看字符串中的所有字符,即使是不可打印的字符,也可以随时

print repr(the_string)

将为不可打印的字符显示\x00之类的内容。

答案 1 :(得分:4)

您可以使用 str.isprintable()(来自PEP-3138)过滤字符串:

output_str = ''.join(c for c in input_str if c.isprintable())

答案 2 :(得分:3)

收集您要启用的字符集,并删除其他字符

import re
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)

它将删除除a到z,A到Z和0到9之外的任何字符。

答案 3 :(得分:1)

正则表达式是一种适用于各种字符串分析的优秀且非常通用的工具。如果速度是个问题,那么字符串类中的“translate”方法也可以帮到你。

首先定义一个('identity')映射,它不会改变任何东西:

mapping = map(chr, range(256))

如果您想用“b”替换每个“a”,则修改映射

mapping[ord('a')] = 'b'

现在为“translate”方法构建表:

table = "".join(mapping)

print "abc".translate(table)

打印“bbc”。

如果您确实要删除“a”,则不要修改上面的映射,构建表然后调用 翻译如下:

print "abc".translate(table, "a")

给你“bc”。

构建表后,translate方法非常快。

因此,在您的情况下,您可以修改映射,以便将所有不需要的字符映射到空白

mapping = map(chr, range(256))
table = "".join( " " if c in unwanted_chars else c for c in map(chr, range(256)) )

并使用len("my string".translate(table).trim())忽略不需要的字符 在字符串的开头和结尾。

或者你使用len("my string".translate(table, unwanted_chars))会忽略所有不需要的字符。