擅长:python、mysql、java
<p>问题出在您的regex中,奇怪的是,当您使用“非消耗性标记”(即正查找)作为标点(<code>(?<=[.!?])</code>)时,却没有用于检测每个句子的第一个字母(<code>[A-Z]</code>)。在</p>
<p>因此,您在<code>split()</code>中使用的regex将使用每个匹配项的第一个大写字母。您可能打算不使用它(即,只使用中间的空格),在这种情况下,您希望使用不消耗文本的正向前瞻:</p>
<pre><code>(?<=[.!?])\s(?=[A-Z])
</code></pre>
<p>Lookaheads和lookbehind通常是锚定,锚定不消耗输入中的任何文本。当然,最常用的锚定是<code>^</code>和{<cd5>}。它们只匹配输入文本中的<em>位置</em>,这正是您想要的。在</p>
<p>lookbehind将匹配前面的<em>文本</em>到位置必须匹配/不匹配给定正则表达式的位置,而lookahead将匹配一个位置,其中<em>后面的文本</em>必须匹配/不匹配给定的regex。在一个匹配的空格之后,您需要的是一个后面是大写字母的位置,因此需要使用一个正的lookahead(<code>(?=<re>)</code>,其中{<cd7>}是regex)匹配一个大写字母(<code><re></code>是{<cd2>})。在</p>