【发布时间】:2011-11-01 02:55:27
【问题描述】:
有时我有一个带有奇怪字符的字符串。它们在浏览器中不可见,但它们是字符串的一部分并计入 len()。 我怎样才能摆脱它? Strip() 删除正常空间,但不删除符号。
【问题讨论】:
标签: python
有时我有一个带有奇怪字符的字符串。它们在浏览器中不可见,但它们是字符串的一部分并计入 len()。 我怎样才能摆脱它? Strip() 删除正常空间,但不删除符号。
【问题讨论】:
标签: python
您可以使用 str.isprintable() 过滤您的字符串(来自PEP-3138):
output_str = ''.join(c for c in input_str if c.isprintable())
【讨论】:
[c for c in _x if not c.isprintable()]。就我而言,我只得到不可见的,所以,你可以做一些“热代码”,做任何你想做的事情。
正则表达式是用于各种字符串分析的良好且非常通用的工具。如果速度是个问题,字符串类中的“翻译”方法也可以为您提供帮助。
首先你定义一个('identity')映射,它不会改变任何东西:
mapping = map(chr, range(256))
如果你想用一个“b”替换每个“a”,你修改你的映射
mapping[ord('a')] = 'b'
现在您为“翻译”方法构建表:
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)),它会忽略所有你不需要的字符。
【讨论】:
使用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 之类的内容。
【讨论】:
收集您想要启用的字符集并像这样删除其余字符
import re
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)
它将删除除 a 到 z、A 到 Z 和 0 到 9 以外的任何字符。
【讨论】: