<p>您需要重新安排一些内容,以便同时为一行写入所有项目。这里的方法是使用<code>match_hor</code>查找每个标题开头,然后将其用作<code>match_od</code>的起点,而<code>match_dl</code>又用作<code>match_dl</code>的起点</p>
<pre><code>import re
import csv
with open('doubt2.txt','r', encoding="utf-8") as f:
f_contents = f.read()
regexHOR = r'\n(TITLE-\S+-\d{2}-\d{2})[:|;](.*?)^Conditions'
regexOD = r'^Opening date\s+(\d{1,2} \w+ \d{4})\s*?'
regexDL =r'^Deadline\s+(\d+ \w+ \d+)'
patternHOR = re.compile(regexHOR, re.MULTILINE | re.DOTALL)
patternOD = re.compile(regexOD, re.MULTILINE | re.DOTALL)
patternDL = re.compile(regexDL, re.MULTILINE | re.DOTALL)
with open("result.csv", "w",newline='') as outfile:
csvfile = csv.writer(outfile)
csvfile.writerow(['Topic ID', 'Title', 'Opening date', 'Deadline'])
for match_hor in patternHOR.finditer(f_contents):
code, title = [match_hor.group(1), match_hor.group(2).replace('\n', ' ')]
offset = match_hor.end()
match_od = patternOD.search(f_contents[offset:])
offset += match_od.end()
opening = match_od.group(1)
match_dl = patternDL.search(f_contents[offset:])
offset += match_dl.end()
deadline = match_dl.group(1)
csvfile.writerow([code, title.strip(), opening, deadline])
</code></pre>
<p>这将为您提供包含以下内容的<code>result.csv</code>:</p>
<pre class="lang-none prettyprint-override"><code>Topic ID,Title,Opening date,Deadline
TITLE-SDFSD-DFDS-SFDS-01-01,This is the title 1 that is split into two lines with a blank line in the middle,15 Apr 2021,26 Aug 2021
TITLE-SDFSD-DFDS-SFDS-01-02,This is the title2 in one single line,15 March 2021,17 Aug 2021
TITLE-SDFSD-DFDS-SFDS-01-03,This is the title3 that is too long and takes two lines,15 May 2021,26 Sep 2021
</code></pre>