Displaying posts tagged with

“string”

Python食谱-1.10.使用一个字符集合来过滤字符串

原文作者:Jurgen Hermann, Nick Perkins, Peter Cogolo 中文编译:Tony (digitalsatori) 问题 给定一个字符集合,如何创建一个过滤功能,使其作用于任意的字符串s,返回一个字符串其只包含指定字符集合中的字符。 解决方法 字符串对象的translate方法是一个处理这类问题的快速,有效的方法。但是要让translate来完成这类任务,我们还需要事先做一些准备工作。translate的第一个参数是翻译表。在我们以上的问题中并不涉及任何翻译,所以我们必须让第一个参数表示“不翻译”。translate的第二个参数表示那些字符我们要删除。因为在上述问题中,我们被要求保留而不是删除指定的字符。所以我们必须要给予第二个参数所有非保留的字符,用以被删除。closure 是做这种预先准备工作的最佳选择: import string # 创建一个代表所有字符的可重用的字符串,其作用是 # 作为一个"不做任何翻译"的翻译对照表 allchars = string.maketrans('','') def makefilter(keep): """返回一个函数,该函数以一个字符串为输入参数,运行 后返回一个仅包含'keep'中的字符的字符串拷贝。 注意:'keep' 必须是普通字符串, 不能是Unicode字符串 """ #创建一个包含除'keep'中字符以外的所有字符的字符串: #keep的反集,表示我们要删除的那些字符 delchars = allchars.translate(allchars, keep) def thefilters(s): return s.translate(allchars, delchars) return thefilters if __name__ == '__main__': just_vowels = makefilter('aeiou') print just_vowels('four score and seven [...]

Python食谱-1.9.字符串的translate方法的简化用法

原文作者:Chris Perkins, Raymond Hettinger 中文编译:Tony(digitalsatori) 问题 想使用Python字符串对象强大的 translate 方法,却总困惑于其参数的设置和 string.maketrans 的用法。怎么才能有效的简化使用呢? 解决方法 在 Python食谱1.10 中介绍的字符串的 translate 方法强大而又灵活,但是我们绝对有必要为它创建一个简化使用的用户界面。一个factory函数,返回一个closure就能轻松化繁为简: import string def translator(frm='', to='', delete='', keep=None): if len(to) == 1: to = to * len(frm) trans = string.maketrans(frm, to) if keep is not None: allchars = string.maketrans('','') delete = allchars.translate(allchars, keep.translate(allchars, delete)) def translate(s) return s.translate(trans, delete) [...]