擅长:python、mysql、java
<p>不确定您尝试了什么,但是<code>re.sub</code>或<code>replace</code>可能不起作用,因为它们不一定从字符串的开头替换。您必须查看字符串以什么代码开头,然后替换该代码,并继续处理字符串的其余部分。</p>
<p>例如,如下所示:</p>
<pre><code>def huffmanDecode (dictionary, text):
res = ""
while text:
for k in dictionary:
if text.startswith(k):
res += dictionary[k]
text = text[len(k):]
return res
</code></pre>
<p>或递归地:</p>
<pre><code>def huffmanDecode (dictionary, text):
if text:
k = next(k for k in dictionary if text.startswith(k))
return dictionary[k] + huffmanDecode(dictionary, text[len(k):])
return ""
</code></pre>
<p>您还可以从代码中生成regex并使用<code>re.match</code>查找下一个:</p>
<pre><code>import re
def huffmanDecode (dictionary, text):
p = "|".join(dictionary) # join keys to regex
res = ""
while text:
m = re.match(p, text)
res += dictionary[m.group()]
text = text[len(m.group()):]
return res
</code></pre>
<p>注意:这两种方法都没有正确的错误处理,如果代码与消息不匹配,它们将永远失败或循环,但这应该可以让您开始。</p>