擅长:python、mysql、java
<p>您应该改用<code>(?=...)</code>(lookahead断言),因为只有<code>findall</code>匹配项才使用字符串部分一次,means忽略重叠:</p>
<pre><code>import re
seq='NNSTQ'
glyco=re.findall('(?=(N[^P][S|T][^P]))',seq)
print (glyco)
# prints ['NNST','NSTQ']
</code></pre>
<p>这将匹配所有内容,即使它重叠。正如<a href="https://docs.python.org/3/library/re.html" rel="nofollow noreferrer">doc</a>所述:</p>
<blockquote>
<p>(?=...) </p>
<p>Matches if ... matches next, but doesn’t consume any of the
string. This is called a lookahead assertion. For example, Isaac
(?=Asimov) will match 'Isaac ' only if it’s followed by 'Asimov'.</p>
</blockquote>
<p>您还可以查看此项以了解更多信息:</p>
<p><a href="http://regular-expressions.mobi/lookaround.html?wlr=1" rel="nofollow noreferrer">http://regular-expressions.mobi/lookaround.html?wlr=1</a></p>