擅长:python、mysql、java
<p>不匹配当前数据超过1个单词的一个原因是模式以<code>[? ]</code>开头,它将匹配空格或问号。你知道吗</p>
<p>您还可以省略一些捕获组而使用单个组。请注意,不必使用<code>?</code>使此匹配<code>[a-z\s]+?[.:]</code>非贪婪,因为character类不包含<code>.</code>或<code>:</code></p>
<p>要获取紧跟<code>.</code>或<code>:</code>的大写单词,可以使用:</p>
<pre><code>\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)[.:]
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li><code>\b</code>字边界</li>
<li><code>(</code>捕获<strong>组1</strong>
<ul>
<li><code>[A-Z][a-z]+</code></li>
<li><code>(?:\s+[A-Z][a-z]+)*</code>重复0+次匹配A-Z和1+次A-Z</li>
</ul></li>
<li><code>)</code>关闭组</li>
<li><code>[.:]</code>匹配<code>.</code>或<code>:</code></li>
</ul>
<p><a href="https://regex101.com/r/1D9LYg/1" rel="nofollow noreferrer">Regex demo</a></p>
<p>如果您还想匹配由<code>(</code>和<code>)</code>包围的单词,那么您可以使用替换。你知道吗</p>
<pre><code>\b((?:\([A-Z][a-z]+\)|[A-Z][a-z]+)(?:\s+(?:\([A-Z][a-z]+\)|[A-Z][a-z]+))*)[.:]
</code></pre>
<p><a href="https://regex101.com/r/1FGi3H/1" rel="nofollow noreferrer">Regex demo</a></p>