<p>解释说,不使用正则表达式更容易解决问题。在</p>
<h2>逐行解释</h2>
<p>首先打开文件</p>
<pre><code>f=open('Poems.txt', 'r').read()
</code></pre>
<p>你将得到你的诗歌列表,其中包含你在问题最后一部分中展示的预期输出</p>
^{pr2}$
<p>我们删除第一个元素,因为它是空的,这是由于split函数</p>
<pre><code>poems_list.pop(0)
</code></pre>
<p>到目前为止,<code>poems_list</code>将给出另一个用户在他的问题中发布的内容。但是,如果您真的想解析数据,我想这是您使用regex的目的,那么您可以继续执行以下操作:</p>
<p>我们检查了诗歌列表中的每首诗,分析它们所包含的数据</p>
<pre><code>for poem in poems_list:
</code></pre>
<p>首先,我们用porse关键字分割它,记住你必须在分号和诗名之间留一个空格,否则它将无法工作(不修改代码)</p>
<pre><code> i1 = poem.split('POEM: ')
</code></pre>
<p>现在我们由作者拆分它,同样适当地留下尾随空格。我们取i1第二个元素,因为第一个元素是诗名,其余的内容现在存储在列表的第二个元素中。在</p>
<pre><code> i2 = i1[1].split(' AUTHOR: ')
</code></pre>
<p>同样,我们将使用列表中的第二个元素来获取文本的其余部分。我们把它分成新行,因为这首诗是在陈述作者之后,在换行之后开始的</p>
<pre><code> i3 = i2[1].split('\n')
</code></pre>
<p>我们保存我们获得的值</p>
<pre><code> poem_name = i2[0]
poem_author = i3[0]
poem_content = i3[1]
</code></pre>
<p>现在轮到你按你的意愿处理数据了。我建议你把它储存在字典里。在</p>
<h2>完整代码</h2>
<p>所有无说明的代码(用于复制粘贴):</p>
<pre><code>f=open('Poems.txt', 'r').read()
poems_list = ["POEM" + s for s in f.split("POEM")]
poems_list.pop(0)
for poem in poems_list:
i1 = poem.split('POEM: ')
i2 = i1[1].split(' AUTHOR: ')
i3 = i2[1].split('\n')
poem_name = i2[0]
poem_author = i3[0]
poem_content = i3[1]
</code></pre>
<h2>进一步思考</h2>
<p>我不建议你把你的数据像那样存储在那个文件里。这是非常低效的,微小的修改会在代码的功能上造成很大的问题,这就需要进行很大的修改。建议使用数据库、pandas、csv格式甚至pickle来存储字典,或者至少格式化得更好一些。在</p>