我想将Si(C3(COOH)2)4(H2O)7等字符串分成以下
[Si,(C3(COOH)2),4,(H2O),7]
也就是说,整个paranthesis表达式本身就变成了一个元素。我用re.findall()尝试了许多不同的组合无济于事。非常感谢任何帮助。
答案 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