我正在尝试匹配具有嵌套括号的数学表达式字符串.
import re
p = re.compile('\(.+\)')
str = '(((1+0)+1)+1)'
print p.findall(s)
Run Code Online (Sandbox Code Playgroud)
[ '(((1 + 0)+1)+1)']
我希望它匹配所有包含的表达式,例如(1 + 0),((1 + 0)+ 1)...
我甚至不关心它是否匹配不需要的表达式(((1 + 0),我可以照顾那些.
为什么它不会那样做,我怎么能这样做?
我想要一个Python函数,它接受一个字符串,并返回一个数组,其中数组中的每个项目都是一个字符,或者是另一个这样的数组.嵌套数组在输入字符串中以'('和以')'开头标记.
因此,该函数将如下所示:
1) foo("abc") == ["a", "b", "c"]
2) foo("a(b)c") == ["a", ["b"], "c"]
3) foo("a(b(c))") == ["a", ["b", ["c"]]]
4) foo("a(b(c)") == error: closing bracket is missing
5) foo("a(b))c") == error: opening bracket is missing
6) foo("a)b(c") == error: opening bracket is missing
Run Code Online (Sandbox Code Playgroud)
注意:我更喜欢纯粹功能性的解决方案.
如果给出一个外群,我如何为一组物种生成所有可能的Newick树排列?
对于那些不知道Newick树格式的人,可以在以下网址找到一个很好的描述:https: //en.wikipedia.org/wiki/Newick_format
我想在给出一个外群的情况下为一组物种创建所有可能的Newick树排列.我期望处理的叶节点的数量很可能是4,5或6个叶节点.
允许"软"和"硬"多面体. https://en.wikipedia.org/wiki/Polytomy#Soft_polytomies_vs._hard_polytomies https://biology.stackexchange.com/questions/23667/evidence-discussions-of-hard-polytomy
下面显示的是理想输出,"E"设置为outgroup
理想输出:
((("A","B","C"),("D"),("E"));
((("A","B","D"),("C"),("E"));
((("A","C","D"),("B"),("E"));
((("B","C","D"),("A"),("E"));
((("A","B")("C","D"),("E"));
((("A","C")("B","D"),("E"));
((("B","C")("A","D"),("E"));
(("A","B","C","D"),("E"));
(((("A","B"),"C"),"D"),("E"));
Run Code Online (Sandbox Code Playgroud)
但是,我使用itertools带来的任何可能的解决方案,特别是itertools.permutations,都遇到了等效输出的问题.我想出的最后一个想法涉及下面显示的等效输出.
等效输出:
((("C","B","A"),("D"),("E"));
((("C","A","B"),("D"),("E"));
((("A","C","B"),("D"),("E"));
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案的开始.但是,除了itertools之外,我现在还不确定该怎么回事.
import itertools
def Newick_Permutation_Generator(list_of_species, name_of_outgroup)
permutations_list =(list(itertools.permutations(["A","B","C","D","E"])))
for given_permutation in permutations_list:
process(given_permutation)
Newick_Permutation_Generator(["A","B","C","D","E"], "E")
Run Code Online (Sandbox Code Playgroud) 让我说我的输入是fn(a(b,c),d) fn(a,d) fn(a(b),d),我想a(b,c),d如何写一个模式来获取()内的所有内容?第二个fn()很容易第一个和第三个我不知道如何匹配
我想验证然后解析这个字符串(在引号中):
string = "start: c12354, c3456, 34526; other stuff that I don't care about"
//Note that some codes begin with 'c'
Run Code Online (Sandbox Code Playgroud)
我想验证字符串以'start:'开头并以';'结尾 之后,我想要一个正则表达式解析字符串.我尝试了以下python重新代码:
regx = r"start: (c?[0-9]+,?)+;"
reg = re.compile(regx)
matched = reg.search(string)
print ' matched.groups()', matched.groups()
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的变化,但我可以得到第一个或最后一个代码,但不是所有三个的列表.
或者我应该放弃使用正则表达式?
编辑:更新,以反映我忽略的问题空间的一部分,并修复字符串差异.感谢所有的建议 - 在这么短的时间内.