<h2><a href="https://stackoverflow.com/a/68811016/11108026">See this answer instead.</a></h2>
<h3>警告</h3>
<p>这样做有点代码味道。似乎其中一个日志函数没有在每个日志后打印换行符,而它应该这样做</p>
<p>我建议找到罪魁祸首并从源头解决问题,但在此之前,这应该是可行的</p>
<h3>代码</h3>
<p>当然,没有正则表达式也可以完成,但我在这里遵循了您的指导,只是在您的代码片段中更改了正则表达式:</p>
<pre class="lang-py prettyprint-override"><code>import re
string = "2021-08-04:12.55.51.965438904: bla bla bla bla2021-08-04:12.55.51.965493516: bla bla bla bla2021-08-04:12.55.52.073093436: bla bla bla bla"
reg_exp = re.compile(r"(\d{4}-.+?)(?=(\d{4}-|$))")
for match in reg_exp.finditer(string):
print(match.group(1))
</code></pre>
<h3>说明</h3>
<p>此正则表达式匹配四位数字&;连字符,然后是其他任何内容,直到找到其中一个:另外四个数字&;连字符,或行尾</p>
<pre class="lang-regex prettyprint-override"><code>(\d{4}-.+?)(?=(\d{4}-|$))
</code></pre>
<p>下面是在<a href="https://regex101.com/r/D20L0z/1" rel="nofollow noreferrer">Regex101</a>上测试的表达式的永久链接</p>
<h3>更安全的版本*</h3>
<p>只需将这些正则表达式粘贴到上面的代码段中即可</p>
<pre class="lang-regex prettyprint-override"><code>(\d{4}-\d{2}-\d{2}:.+?)(?=(\d{4}-\d{2}-\d{2}:|$))
</code></pre>
<p><a href="https://regex101.com/r/W6Noak/1" rel="nofollow noreferrer">Regex101</a>:这一个检查以确保整个前缀是正确的。它应该看起来像:<code>yyyy-mm-dd:</code>。年、月和日都应该是数字或<code>\d</code>,所以我们得到:<code>\d{4}-\d{2}-\d{2}:</code></p>
<pre class="lang-regex prettyprint-override"><code>(\d{4}-\d{2}-\d{2}:.+?)(?=(\d{4}-\d{2}-\d{2}:|[\n\r]*$))
</code></pre>
<p><a href="https://regex101.com/r/AE8kk3/1" rel="nofollow noreferrer">Regex101</a>:即使末尾打印了额外的换行符,此项仍将与字符串匹配。它将<code>$</code>更改为<code>[\n\r]*$</code></p>
<p><em>如果有人能想出其他方法让regex更安全,请随意添加到这里</em></p>
<p><sub>*根据OP的要求在下面的评论中添加。</sub></p>