擅长:python、mysql、java
<p>您可以使用<code>groupby</code>:</p>
<pre><code>s = "abcde---fghij--klmnopq------rstuvw-----xy-z"
from itertools import groupby
[(next(g)[0], sum(1 for _ in g) + 1) for k, g in groupby(enumerate(s), lambda x: x[1]) if k == "-"]
# [(5, 3), (13, 2), (22, 6), (34, 5), (41, 1)]
</code></pre>
<hr/>
<p>或者像@Willem评论的那样,用<code>len</code>替换<code>sum</code>:</p>
<pre><code>[(next(g)[0], len(list(g)) + 1) for k, g in groupby(enumerate(s), lambda x: x[1]) if k == "-"]
# [(5, 3), (13, 2), (22, 6), (34, 5), (41, 1)]
</code></pre>