使用正则表达式python拆分复杂的字符串

时间:2016-11-11 18:39:47

标签: regex string python-3.x

我想将Si(C3(COOH)2)4(H2O)7等字符串分成以下

[Si,(C3(COOH)2),4,(H2O),7]

也就是说,整个paranthesis表达式本身就变成了一个元素。我用re.findall()尝试了许多不同的组合无济于事。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您必须自己扫描字符串,跟踪嵌套深度。重要的事件'在字符串'开头,' at(',' at)'和'在字符串'结尾处。在每个事件中,考虑深度并重置它。

inn = 'Si(C3(COOH)2)4(H2O)7'
out = ['Si', '(C3(COOH)2)', '4', '(H2O)', '7']
res = []
beg = 0
dep = 0
for i, c in enumerate(inn):
    if c == '(':
        if dep == 0 and beg < i:
            res.append(inn[beg:i])
            beg = i
        dep += 1
    elif c == ')':
        if dep == 0:
            raise ValueError("')' without prior '('")
        elif dep == 1:
            res.append(inn[beg:i+1])
            beg = i+1
        dep -= 1
if dep == 0:
    res.append(inn[beg:i+1])
else:
    raise ValueError("'(' without following ')'")
print(res, res == out)

# prints
# ['Si', '(C3(COOH)2)', '4', '(H2O)', '7'] True