有时我有一个带有奇怪字符的字符串。它们在浏览器中不可见,但却是字符串的一部分,在len()中被计算在内。 我怎样才能把它们去掉呢?Strip()可以删除正常的空格,但不能删除那些符号。
Python - 如何删除字符串中的隐藏符号?
使用
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
这样的不可打印的字符。
Mihail Shcheglov
发布于
2011-08-22
0
人赞同
你可以用以下方法过滤你的字符串
str.isprintable()
(from
PEP-3138
):
output_str = ''.join(c for c in input_str if c.isprintable())
Bitart
:
即使在若干年后的今天,也非常容易实现。如果你想收集字符串中那些不可见的元素,那么,你只要。
[c for c in _x if not c.isprintable()]
。 在我的例子中,我只得到不可见的元素,所以,你可以做一些 "代码中的热",做你想做的事。
YOU
发布于
2011-08-22
0
人赞同
收集你想启用的字符集,然后像这样删除其余的字符
import re
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)
它将删除除a到z、A到Z和0到9以外的任何字符。
rocksportrocker
发布于
2011-08-22
0
人赞同
正则表达式是一个很好的、非常通用的工具,适用于各种字符串的分析。如果速度是一个问题,来自字符串类的 "翻译 "方法也可以帮助你。
首先,你定义一个('身份')映射,这不会改变任何东西。
mapping = map(chr, range(256))
如果你想用一个 "b "来代替每个 "a",你要修改你的映射关系
mapping[ord('a')] = 'b'
现在你为 "翻译 "方法建立表格。
table = "".join(mapping)
print "abc".translate(table)
prints "bbc".
If you really want to delete the "a", you do not modify the mapping above, build the table 和 then call
translate as follows:
print "abc".translate(table, "a")
gives you "bc".
一旦建好了表,翻译方法就非常快。
因此,在你的情况下,你可以修改映射,使你所有不需要的字符都被映射到一个空白处。
mapping = map(chr, range(256))
table = "".join( " " if c in unwanted_chars else c for c in map(chr, range(256)) )