擅长:python、mysql、java
<p>我找到了一种方法来创建同样的结果,这种方法对我很有用,但可能不适用于一般情况。它属于问题的“另类”:在解析过的汤之外进行替换。在</p>
<ul>
<li><p>在分析主文档之前对大括号进行转义字符串格式设置:</p>
<pre><code>escaped = sub(r'({|})', r'\1\1', input)
soup = BeautifulSoup(escaped, 'lxml') # or lxml
</code></pre></li>
<li><p>将<code><c replace="alpha" /></code>替换为替换字符串(对于所有这些字符串):</p>
<pre><code>name = c_tag.attrs['replace']
ctag.replace_with(NavigableString('{' + name + ':s}'))
</code></pre></li>
<li><p>将所有替换项存储在字典中(可能已经是这样):</p>
<pre><code>rep = {'alpha': '<lots /><of-xml />', 'beta': '<b>hi</b>'}
</code></pre></li>
<li><p>使用字符串格式进行所有替换:</p>
<pre><code>output = soup.prettify().format(**rep)
</code></pre></li>
</ul>
<p>我承认我的案子有点特别,所以可能对其他人没有帮助。但是在我的例子中,每个<code><c></code>可以被包含更多<code><c></code>的xml替换,由于多进程通信,每个级别都需要被解析或pickle。(Pickling只比解析快20-50%,并且遇到了硬递归限制)。因此,只需执行一次而不是为每个级别执行此操作可以节省大量时间(在我测试的案例中是系数3),因为regex替换和字符串替换比解析快得多。在</p>