<p>您可以使用正则表达式:</p>
<pre><code>import re
s = "(Esy@ESY15_g64743_DN3_SP7_c0:0.0726396855636,Aar@AA_maker7399_1:0.137507902808,((Spa@Tp2g18720:0.0318934795022,Cpl@CP2_g48793_DN3_SP8_c:0.0273465005242):9.05326020871e-05,(((Bst@Bostr_13083s0053_1:0.0332592496158,((Aly@AL8G21130_t1:0.0328569260951,Ath@AT5G48370_1:0.0391706378372):0.0205924636564,(Chi@CARHR183840_1:0.0954469923893,Cru@Carubv10026342m:0.0570981548016):0.00998579652059):0.0150356382287):0.0340484449097,(((Hco@scaff1034_g23864_DN3_SP8_c_TE35_CDS100:0.00823215335663,Hlo@DN13684_c0_g1_i1_p1:0.0085462978729):0.0144626717872,Hla@DN22821_c0_g1_i1_p1:0.0225079453622):0.0206478928557,Hse@DN23412_c0_g1_i3_p1:0.048590776459):0.0372829371381):0.00859075940423,(Esa@Thhalv10004228m:0.0378509854703,Aal@Aa_G102140_t1:0.0712272454125):1.00000050003e-06):0.00328120860999):0.0129090235079):0.0129090235079;"
p = "...?(?=@)|\(|\)"
result = re.findall(p, s)
</code></pre>
<p>您可以将结果作为列表,这样您就可以将其设置为字符串或对其执行任何操作</p>
<p>解释正在发生的事情:<br/>
<code>p</code>是正则表达式模式<br/>
所以在这个模式中:<br/>
<code>.</code>表示匹配任何单词<br/>
<code>...?(?=@)</code>意味着匹配任何单词,直到我找到一个单词<code>?</code>,其中<code>?</code>是<code>@</code>,所以整个模式意味着在<code>@</code>之前可以找到任意三个单词<br/>
<code>|</code>是<code>or</code>语句,我在这里使用它来查找另一个模式<br/>
剩下的就是找到<code>)</code>和<code>(</code></p>