添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
不拘小节的米饭  ·  SLURM 使用参考·  1 月前    · 
憨厚的鼠标  ·  怎样用python ...·  9 月前    · 
逆袭的葡萄酒  ·  VS2015 ...·  9 月前    · 
星星上的斑马  ·  Django ...·  1 年前    · 

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

11 人关注

有时我有一个带有奇怪字符的字符串。它们在浏览器中不可见,但却是字符串的一部分,在len()中被计算在内。 我怎样才能把它们去掉呢?Strip()可以删除正常的空格,但不能删除那些符号。

1 个评论
python
robos85
robos85
发布于 2011-08-22
4 个回答
agf
agf
发布于 2011-08-22
已采纳
0 人赞同

使用 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
Mihail Shcheglov
发布于 2011-08-22
0 人赞同

你可以用以下方法过滤你的字符串 str.isprintable() (from PEP-3138 ):

output_str = ''.join(c for c in input_str if c.isprintable())
    
即使在若干年后的今天,也非常容易实现。如果你想收集字符串中那些不可见的元素,那么,你只要。 [c for c in _x if not c.isprintable()] 。 在我的例子中,我只得到不可见的元素,所以,你可以做一些 "代码中的热",做你想做的事。
YOU
YOU
发布于 2011-08-22
0 人赞同

收集你想启用的字符集,然后像这样删除其余的字符

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

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

I need full utf8 signs set :/
YOU
@robos85,你需要一些信息来剥离或不剥离。所以我可以假设你需要剥离utf8的所有无效字符。
rocksportrocker
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)) )