我在 python 中有一个列表,其中包含一个项目,它是以 Newick 格式编写的树,如下所示:
['(BMNH833953:0.16529463651919140688,(((BMNH833883:0.22945757727367316336,(BMNH724182a:0.18028180766761139897,(BMNH724182b:0.21469677818346077913,BMNH724082:0.54350916483644962085):0.00654573856803835914):0.04530853441176059537):0.02416511342888815264,(((BMNH794142:0.21236619242575086042,(BMNH743008:0.13421900772403019819,BMNH724591:0.14957653992840658219):0.02592135486124686958):0.02477670174791116522,BMNH703458a:0.22983459269245612444):0.00000328449424529074,BMNH703458b:0.29776257618061197086):0.09881729077887969892):0.02257522897558370684,BMNH833928:0.21599133163597591945):0.02365043128986757739,BMNH724053:0.16069861523756587274):0.0;']
在树格式中,如下所示:
我正在尝试编写一些代码来查看列表项并返回 ID (BMNHxxxxxx),这些 ID (BMNHxxxxxx) 由 0 的分支长度(例如 <0.001)连接(以红色突出显示)。我考虑过使用正则表达式,例如:
JustTree = []
with JustTree as f:
for match in re.finditer(r"(?<=Item\sA)(?:(?!Item\sB).){50,}", subject, re.I):
f.extend(match.group()+"\n")
取自另一个 StackOverflow 答案,其中项目 A 将是“:”,因为分支长度始终出现在 a : 之后,而项目 B 将是“,”或“)”或“;” 因为这些有三个字符来分隔它,但我在正则表达式方面没有足够的经验来做到这一点。
在这种情况下,通过使用 0 的分支长度,我希望代码输出 ['BMNH703458a', 'BMNH703458b']。如果我可以将其更改为还包括由用户定义值的分支长度(例如 0.01)连接的 ID,这将非常有用。
如果有人有任何意见,或者可以指出一个有用的答案,我将不胜感激。