作业帮 > 综合 > 作业

python最里层匹配括号

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 03:40:24
python最里层匹配括号
要输出一段文字里最里层括号和它们里面的东西,如果不止一对最里层括号,要怎么表示.例如:(((a,b),(c,d)),e),要输出(a,b)和(c,d)
src= "(r,(i),(f,(a,b),(c,d),e,(g,k),l,(z),o,(4,5),(erer))"

srclist = src.split(",")

for i in range(len(srclist)):
    if "(" in srclist[i] and ")" in srclist[i]:
        print srclist[i]
        continue
    if "(" in srclist[i] and ")" in srclist[i+1] and "(" not in srclist[i+1]:
        print srclist[i] + "," + srclist[i+1]
#out:(i)
(a,b)
(c,d)
(g,k)
(z)
(4,5)
(erer))

当然,正则代码就要简明很多.对正则不熟.

再问: 请问如果src = '((a-(b-c)(b+c))'这种要怎么写呢
再答: 不好意思。上面代码不好。下面是新的代码。src= "((3,4)((4,5,6))(4-9))"
srclist = list(src)

for i in range(len(srclist)):
    if srclist[i] == ")" and srclist[i-1] != ")":
        tmp = srclist[0:i+1][::-1]
        for j in range(len(tmp)):
            if tmp[j] == "(" :
                print "".join(srclist[i-j:i+1])
                breakout:(3,4)
(4,5,6)
(4-9)

不知道(3,4)是否符合你所要求的最里层?貌似不符合吧。明天在改改。
再问: 最里层可能就(4,5,6)吧,谢谢啊,麻烦你了
再答: src= "((3,4)((4,5,6))(4-9))"
srclist = list(src)

r=[]
 
for i in range(len(srclist)):
    if srclist[i] == ")" and srclist[i-1] != ")":
        tmp = srclist[0:i+1][::-1]
        p = tmp.count("(") - tmp.count(")") + 1
        for j in range(len(tmp)):
            if tmp[j] == "(" :
                r.append(("".join(srclist[i-j:i+1]),p))
                break

f = [i[1] for i in r]
f.sort()
for i in r:
    if i[1] == f[-1]:
        print i[0]out:(4,5,6)