gpt4 book ai didi

Python 正则表达式 : parsing newick format

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:44 24 4
gpt4 key购买 nike

我有一个像这样的字符串:

(A\2009_2009-01-04:0.2,(A\name2\human\2007_2007:0.3,A\chicken\ird16\2016_20016:0.4)A\name3\epi66321\2001_2001-04-04:0.5)A\name_with_space\2014_2014:0.1)A\name4\66036-8a\2004_2004-12-05;

在此树中,名称在左侧用左括号“(”、右括号“)”或逗号括起来,在右侧用冒号“:”括起来'。也就是说,子字符串“A\2009_2009-01-04”、“A\name2\human\2007_2007”、“A\name3\epi66321\2001_2001-04-04”是名称。 (这实际上是 newick 格式的树)。

我想找到一个正则表达式模式,它可以查找所有名称,并且对命名空间的限制尽可能小。将名称视为变量,例如 Wikipedia 中的示例:


(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;

其中A、B、C等可以是任意字符串。命名空间的唯一限制是名称不能包含圆括号或方括号、“&”、“,”或“:”,因为这些是定义树格式的特殊字符,就像逗号定义 csv 格式一样。

奖励:有时,树中的内部节点没有被标记:


(A:0.1,B:0.2,(C:0.3,D:0.4):0.5);

在这种情况下,正确返回长度为零的字符串的正则表达式会很棒。

最佳答案

您似乎想要提取以 1+ (, ), 开头,然后包含 1+ 非空白字符的子字符串除了 :; 之外,尽可能多,但停在单词边界。

使用

r'[(),]+([^;:]+)\b'

请参阅regex demo .

图案详细信息

  • [(),]+ - 字符类中的一个或多个字符:(, ),
  • ([^;:]+) - 第 1 组:除 ;: 之外的一个或多个字符,尽可能多
  • \b - 单词边界

Python demo :

import re
rx = r'[(),]+([^;:]+)\b'
s = "(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;((A\\2009_2009-01-04:0.2,(A\\name2\\human\\2007_2007:0.3,A\\chicken\\ird16\\2016_20016:0.4)A\\name3\\epi66321\\2001_2001-04-04:0.5)A\\name_with_space\\2014_2014:0.1)A\\name4\\66036-8a\\2004_2004-12-05;"
res = re.findall(rx, s)
for val in res:
print(val)

输出:

A
B
C
D
E
F
A\2009_2009-01-04
A\name2\human\2007_2007
A\chicken\ird16\2016_20016
A\name3\epi66321\2001_2001-04-04
A\name_with_space\2014_2014
A\name4\66036-8a\2004_2004-12-05

关于Python 正则表达式 : parsing newick format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45668107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com