<p>在Python中<code>re</code>,<a href="https://docs.python.org/3/library/re.html#re.M" rel="nofollow noreferrer">^{<cd2>} option</a>只重新定义了两个锚点<code>^</code>和<code>$</code>的行为,它们开始匹配任何<em>行</em>的开始和结束,而不仅仅是<em>整个字符串</em>:</p>
<blockquote>
<p>When specified, the pattern character '^' matches at the beginning of the string and at the beginning of each line (immediately following each newline); and the pattern character '$' matches at the end of the string and at the end of each line (immediately preceding each newline). By default, '^' matches only at the beginning of the string, and '$' only at the end of the string and immediately before the newline (if any) at the end of the string. Corresponds to the inline flag <code>(?m)</code>.</p>
</blockquote>
<p>接下来,被<code>[^ ]</code>求反的字符类匹配<em>除文本规则空格字符以外的任何字符</em>(<code>\x20</code>,十二月代码32)。因此,<code>[^ ]*</code>匹配除空格以外的任何零个或多个字符(也包括换行符)</p>
<p>你可以用</p>
<pre class="lang-py prettyprint-override"><code> *depends *on *(.*\S) *$
</code></pre>
<p>或者,如果可以使用不间断空格或其他水平Unicode空格</p>
<pre class="lang-py prettyprint-override"><code> [^\S\r\n]*depends[^\S\r\n]*on[^\S\r\n]*(.*\S)[^\S\r\n]*$
</code></pre>
<p>在Python中,可以使用</p>
<pre class="lang-py prettyprint-override"><code>h = r'[^\S\r\n]'
pattern = fr' {h}*depends{h}*on{h}*(.*\S){h}*$'
</code></pre>
<p><code>{h}*(.*\S)</code>部分完成这项工作:首先匹配并使用零个或多个空格,然后将除换行符以外的任何零个或多个字符(尽可能多(<code>.*</code>)+非空白字符(<code>\S</code>)捕获到组1中</p>