Regex 使用正则表达式python拆分复杂字符串
我想将一个字符串,如Si(C3(COOH)2)4(H2O)7拆分为以下内容 [Si,(C3(COOH)2),4,(H2O),7]Regex 使用正则表达式python拆分复杂字符串,regex,string,python-3.x,Regex,String,Python 3.x,我想将一个字符串,如Si(C3(COOH)2)4(H2O)7拆分为以下内容 [Si,(C3(COOH)2),4,(H2O),7] 也就是说,整个妄想表达本身就变成了一个元素。我用re.findall()尝试了许多不同的组合,但都没有效果。非常感谢您的帮助。您必须自己扫描字符串,跟踪嵌套深度。重要的“事件”是“在字符串的开头”、“在(”、“在”)和“在字符串的结尾”。在每个事件中,考虑深度并重置它。 inn = 'Si(C3(COOH)2)4(H2O)7' out = ['Si', '(C3(CO
也就是说,整个妄想表达本身就变成了一个元素。我用re.findall()尝试了许多不同的组合,但都没有效果。非常感谢您的帮助。您必须自己扫描字符串,跟踪嵌套深度。重要的“事件”是“在字符串的开头”、“在(”、“在”)和“在字符串的结尾”。在每个事件中,考虑深度并重置它。
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
inn='Si(C3(COOH)2)4(H2O)7'
out=['Si','(C3(COOH)2','4','(H2O','7']
res=[]
beg=0
dep=0
对于enumerate(inn)中的i、c:
如果c=='(':
如果dep==0且beg
在Python中无法解析带有正则表达式的嵌套结构,因此无法找到拆分的(
或)
。((C3(COOH)2)
应该是(C3(COOH)2)
。