擅长:python、mysql、java
<p>所以这里有一个<em>纯</em>regex解决方案,它似乎是您想要的,但我想知道是否有更好的方法来实现它。我会在提出备选方案时添加它们。我使用了几个在线regex工具以及在shell中玩。在</p>
<p><a href="https://www.debuggex.com" rel="nofollow">One of the tools</a>有一个很好的正则表达式图形和生成工具,因此答案<em>code</em>:regex(间隔为10)是:</p>
<pre><code>^.*?(?=N{10})|(?<=N{10})[^N].*?(?=N{10})|(?<=N{10})[^N].*?$
</code></pre>
<p><img src="https://www.debuggex.com/i/odpHFZPYGZfA1-ap.png" alt="Regular expression visualization"/></p>
<p>用法:</p>
^{pr2}$
<hr/>
<p>所以如果你仔细想想,你会发现一个<em>间隙</em>的开始是一个<em>非间隙</em>的结束,反之亦然。因此,使用一个简单的regex:迭代间隙,向循环添加逻辑以跟踪<em>非gap</em>跨距和<code>yield</code>跨距。(我的占位符变量名可能需要改进)</p>
^{3}$
<p>使用</p>
<pre><code>for start, end in bar(s, 4):
print (start, end), s[start:end]
'''
>>>
(0, 5) NAANA
(15, 24) BBBBNNNCC
(34, 39) DDDDN
>>>
'''
</code></pre>