<p>使用<strong>非捕获组</strong>。看一看:</p>
<pre><code>(?<=– )(?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+
</code></pre>
<p><a href="https://i.stack.imgur.com/ueejR.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ueejR.png" alt="enter image description here"/></a></p>
<p><a href="https://regex101.com/r/P7aonE/6" rel="nofollow noreferrer">Regex Demo</a>-右上角可以看到单个regex组件的描述。你知道吗</p>
<pre><code>(?<=– ) start after – character + whitespace, but not match
(?:.+)? add any text before abbreviation into non-capturing group.
(?:bzw\.|Z\. b\.|u\. a\.) add abbreviations into non-capturing group. Escape the dots via \.
[^\.]+ match anything until fullstop
</code></pre>
<p>基本上,这个想法是从–字符+空格开始,但不匹配它。然后捕获以下任何文本、缩写并捕获到第一个点<code>.</code>,但不捕获缩写组(注意<code>?:</code>)。因为缩写点是非捕获组的一部分,我们“跳过”它并继续,直到结束句子的点。您可以通过<code>|</code>符号添加更多缩写来扩展缩写列表。你知道吗</p>
<p><strong>奖金:</strong></p>
<p>如果您预期并不总是从<code>–</code>序列开始,那么可以执行以下操作:</p>
<pre><code>(?:– |: )((?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+)
</code></pre>
<p>例如,这将允许regex使用<code>:</code>字符而不是<code>–</code>,但是您需要将结果作为组1检索。你知道吗</p>
<p><a href="https://regex101.com/r/P7aonE/7" rel="nofollow noreferrer">Regex Demo</a></p>