擅长:python、mysql、java
<p>Unicode版本的translate需要从Unicode序数(可以用<a href="https://docs.python.org/2/library/functions.html#ord" rel="nofollow noreferrer">^{<cd1>}</a>检索单个字符)到Unicode序数的映射。如果要删除字符,则映射到<code>None</code>。</p>
<p>我更改了您的函数以构建一个dict,将每个字符的序号映射到要转换为的序号:</p>
<pre><code>def translate_non_alphanumerics(to_translate, translate_to=u'_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
translate_table = dict((ord(char), translate_to) for char in not_letters_or_digits)
return to_translate.translate(translate_table)
>>> translate_non_alphanumerics(u'<foo>!')
u'_foo__'
</code></pre>
<p><em>编辑:</em>结果是转换映射必须从Unicode序号(通过<code>ord</code>)映射到另一个Unicode序号、Unicode字符串或无(要删除)。因此,我将<code>translate_to</code>的默认值更改为Unicode文本。例如:</p>
<pre><code>>>> translate_non_alphanumerics(u'<foo>!', u'bad')
u'badfoobadbad'
</code></pre>