<pre><code>>>> string = "The is a better :: sentence as :: compared to that"
>>> x = [' '.join(x) for x in map(lambda x: (x[0].split()[-1], x[1].split()[0]), zip(string.split('::')[:-1], string.split('::')[1:]))]
>>> x
</code></pre>
<p>输出:</p>
^{pr2}$
<hr/>
<p>分离:</p>
<p>首先,根据<code>::</code>进行拆分,并对连续匹配进行压缩分组</p>
<pre><code>pairs = zip(string.split('::')[:-1], string.split('::')[1:]))
</code></pre>
<p>{cd2>如果你得到这个表达式:</p>
<pre><code>[('The is a better ', ' sentence as '), (' sentence as ', ' compared to that')]
</code></pre>
<p>接下来,应用一个函数从每个元组的第一个元素提取最后一个单词,从第二个元素提取第一个单词:</p>
<pre><code>new_pairs = map(lambda x: (x[0].split()[-1], x[1].split()[0]), pairs)
</code></pre>
<p>如果您<code>list()</code>该表达式,您将得到:</p>
<pre><code>[('better', 'sentence'), ('as', 'compared')]
</code></pre>
<p>最后,将每个元组连接到列表理解中:</p>
<pre><code>result = [' '.join(x) for x in new_pairs]
</code></pre>
<p>输出:</p>
^{pr2}$
<p><code>timeit</code>结果:</p>
<pre><code>The slowest run took 4.92 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 5.74 µs per loop
</code></pre>
<hr/>
<p>这是<code>re</code>的另一种方法。在</p>
<pre><code>import re
string = "The is a better :: sentence as :: compared to that"
result = [' '.join(x) for x in re.findall('([\w]+) :: ([\w]+)', string)]
</code></pre>
<p>输出:</p>
^{pr2}$
<p><code>timeit</code>结果:</p>
<pre><code>The slowest run took 4.60 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 4.49 µs per loop
</code></pre>