擅长:python、mysql、java
<p>我对这个问题的解释是,如果字符串<code>3</code>后面的一个或多个空格(到行尾),那么如果该字符串中存在一个空字符串,则将该字符串保存到捕获组4,否则该字符串将保存到捕获组4</p>
<p>您可以使用以下正则表达式</p>
<pre><code>\]\s*(AN|AV)\s+1\s+([\w\s]+)\s+2\s+([\w\s]+)\s+3\s+((?=.*\bda cui\b)|(?!=.*\bda cui\b).*)
</code></pre>
<p><a href="https://regex101.com/r/Hz14Lh/2/" rel="nofollow noreferrer">Demo</a></p>
<p>这将OP的正则表达式中的<code>3\s*([\w\s][^cui]+)</code>替换为<code>3\s+((?=.*\bda cui\b)|(?!=.*\bda cui\b).*)</code></p>
<p>Python的正则表达式引擎在匹配<code>3</code>之后执行以下步骤</p>
<pre><code>\s+ match 1+ spaces
( begin capture group 4
(?=.*\bda cui\b) match 0+ chars, then 'da cui' in a positive lookahead
| or
(?!=.*\bda cui\b) match 0* chars, then 'da cui' in a negative lookahead
.* match rest of line
) end capture group 4
</code></pre>
<p>如果正向前瞻成功,则会将空字符串保存到捕获组</p>