<p>正如Chris在评论中提到的,我建议尝试使用一个已经可以与格式交互的库-<code>configparser</code>对我来说似乎是一个明显的选择,但是如果格式与您的问题不同,那么可能有理由不这样做。你知道吗</p>
<p>除此之外,如果您想使用<code>re</code>,我已经稍微更新了您的代码。以下是我做的调整:</p>
<ul>
<li><p>从三重引号字符串的开头和结尾删除换行符,因为它们将成为匹配的一部分,这可能是您想要的,也可能不是您想要的。我个人的偏好是在实际替换中明确地使用换行符。</p></li>
<li><p>在搜索文本中转义<code>[</code>和<code>]</code>,因为它们是<code>re</code>中的特殊字符,会混淆它(它们指定了字符类)。</p></li>
<li><p>用于<code>with</code>打开单独的输入和输出文件。当您退出<code>with</code>块时,这些将被清除。如果你真的想替换输入文件,我想你可以走了输出.txt之后就越级了。</p></li>
<li><p>您可以使用<code>re.sub</code>直接替换引用,而不是搜索它们,在文本中查找索引,然后替换/追加。在添加文本的情况下,我刚刚对<code>searchtext1</code>和<code>addtext1</code>进行了替换。(我使用了f字符串,但是如果您愿意,也可以使用<code>"{search}\n{add}".format(search=searchtext, add=addtext1)</code>)。</p></li>
<li><p>最后,我们将更新后的文本写回光盘。</p></li>
</ul>
<p>希望有帮助!你知道吗</p>
<pre><code>import re
searchtext1 = """AB 3.483e-01 2.52e-02 ; 3.46 0.0123"""
# add these lines after searchtext1
addtext1 = """CD 2.123e-01 1.31e-02 ; 7.25 0.0145
DE 4.896e-01 7.25e-02 ; 8.25 0.0185"""
searchtext2 = """; atom
#atomnumber
#molecule
\[weight\]"""
# replace these lines to searchtext2
changetext2 = """; iron
#48kcal
35 mol
#12 g"""
with open('input.txt', 'r') as infile, open("output.txt", "w") as outfile:
intext = infile.read()
intext = re.sub(searchtext1, f"{searchtext1}\n{addtext1}", intext)
intext = re.sub(searchtext2, changetext2, intext)
outfile.write(intext)
</code></pre>