擅长:python、mysql、java
<p>可以使用正则表达式删除无效部分:</p>
<pre><code>import re
invalid_tail = re.compile(r'[^a-zA-Z0-9+/=\n\r].*$')
def remove_tail(base64_value):
return invalid_tail.sub('', base64_value)
</code></pre>
<p><code>[^a-zA-Z0-9+/=\n\r]</code>匹配任何<em>非</em>有效Base64字符的字符,加上尾随的<code>=</code>填充、换行符和回车符(在编码值中允许换行)。在</p>
<p>演示:</p>
^{pr2}$
<p>或者,使用样品的可解码部分:</p>
<pre><code>>>> data = "3AQEFGh8NFgoqDwYsAQALDVFPVltYVkNGXldCRFUbNRk= :jhawrewre: \r\n"
>>> remove_tail(data).decode('base64')
'\xdc\x04\x04\x14h|4X(\xa8<\x18\xb0\x04\x00,5E=YmaY\r\x19y]\t\x11Tl\xd4d'
</code></pre>
<p>此解决方案在速度上轻松击败<code>itertools.takewhile()</code>选项:</p>
<pre><code>>>> import timeit
>>> text = "gw3AQEFGh8NFgoqDwYsAQALDVFPVltYVkNGXldCRFUbNRk= :jhawrewre: \r\n"
>>> timeit.timeit('test(text)', 'from __main__ import with_takewhile as test, text')
11.785380125045776
>>> timeit.timeit('test(text)', 'from __main__ import with_re as test, text')
1.480334997177124
</code></pre>
<p>对于这个简单的示例,使用正则表达式的速度几乎快10倍;对于较长的文本,结果将更快。在</p>