python 截取括号外字符串

怎么能不import re做到截取括号外字符串??
比如 ‘(adg)B’ -> 'B'
'(g)B(a)' -> B
'B(a(s(d)))' -> B
不不不 我说的不够明确
不是要把字符串装进一个新的字符
而是找到该字符 也就是说找到该字符在本字符串里的位置
比如 ‘(adg)B’ -> 5
'(g)B(a)' -> 3
'B(a(s(d)))' -> 0

维护一个栈

字符一个一个读进来:

    遇到"("压栈,

    遇到“)”弹栈,

    遇到其他字符:

        如果栈空,输出

        否则,不输出

def rm_bracket(s):
    st = []
    ret = []
    for x in s:
        if x == '(':
            st.append(x)
        elif x == ')':
            st.pop()
        else:
            if len(st) == 0:
                ret.append(x)
    return ''.join(ret)
if __name__ == '__main__':
    print rm_bracket('(adg)B')
    print rm_bracket('(g)B(a)')
    print rm_bracket('B(a(s(d)))B')

追问

阿不好意思 我的问题是要找到括号外字符的位置
说的再具体一点吧
比如 ((1.2)|0) 要找到|在这整个字符串里的位置
((1.2) | (2.1)) 要找到|的位置
(0.(1|2)) 要找到 ‘.’ 的位置

追答def rm_bracket(s):
    st = []
    ret = []
    for i, x in enumerate(s):
        if x == '(':
            st.append(x)
        elif x == ')':
            st.pop()
        else:
            if len(st) == 0:
                ret.append(i)
    return ret
if __name__ == '__main__':
    print rm_bracket('(adg)B')
    print rm_bracket('(g)B(a)')
    print rm_bracket('B(a(s(d)))B')

温馨提示:答案为网友推荐,仅供参考