Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式python拆分复杂字符串_Regex_String_Python 3.x - Fatal编程技术网

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

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

我想将一个字符串,如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(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)