擅长:python、mysql、java
<p>您可以将模式锚定在行/字符串的开头,并移除<code>re.DOTALL</code>修饰符:</p>
<pre><code>re.findall(r'(?m)^\[(.*?)\s\d{6}\s\d{3}]\[\d]\[ERROR]', s)
</code></pre>
<p>参见<a href="https://regex101.com/r/3mSxAv/1" rel="nofollow noreferrer">regex demo</a></p>
<p>使用<code>re.DOTALL</code>,<code>.</code>匹配任何字符<em>,包括</em>换行字符</p>
<p>使用<code>(?m)</code>,<code>^</code>匹配每行的开头,而不仅仅是整个字符串的开头</p>
<p>另外,<code>\s</code>可以匹配换行符,因此您可能希望使用<code>[^\S\r\n]</code>而不是它来只匹配水平空格</p>