我有一种方法可以为对象的所有字符串属性剥离非ASCII[0:126]中的字符串字符:
def niceEncoding(string):
new = ''
#matches all printable ascii characters (0 to 126)
n = re.compile("[ -~]")
for char in n.findall(string):
new += char
return new
def cleanObjEncodings(obj):
for k, v in vars(obj).items():
if type(v) is str:
setattr(obj, k, niceEncoding(v))
return obj
人们对更有效的方法有想法吗?
//
选择改进的方法(感谢):
non_printable = re.compile("[^ -~]")
def cleanObjEncodings(obj):
for k, v in vars(obj).items():
if type(v) is str:
setattr(obj, k, non_printable.sub('', v))
return obj
把正则表达式的意义颠倒一下怎么样?与其匹配好字符,不如匹配坏的字符,并将它们分别替换为空字符串。
如果将正则表达式的构建分离开来,代码会变得更加干净,而正则表达式只需要出现一次。
#matches all except printable ascii characters (32 to 126)
re_non_printable = re.compile("[^ -~]")
def niceEncoding(string):
return re_non_printable.sub("", string)
强调可读性:
from string import printable
def niceEncoding(str):
printable_characters = frozenset(printable)
return ''.join(c for c in str if c in printable_characters)
一种可能更快(我实际上还没有介绍)但可读性较差的方法:
def niceEncoding(str):
unprintable_characters = ''.join(chr(i) for i in (range(0, 32) + range(127, 256)))
return str.translate(None, unprintable_characters)