虽然不可能使用正则表达式,但是以下简单代码将实现所需的结果:
def split_at(text, delimiter, opens='<([', closes='>)]', quotes='"''): result = [] buff = "" level = 0 is_quoted = False for char in text: if char in delimiter and level == 0 and not is_quoted: result.append(buff) buff = "" else: buff += char if char in opens: level += 1 if char in closes: level -= 1 if char in quotes: is_quoted = not is_quoted if not buff == "": result.append(buff) return result
在解释器中运行此命令:
>>> split_at('obj<1, 2, 3>, x(4, 5), "msg, with comma"', ',') #=>['obj<1, 2, 3>', ' x(4, 5)', ' "msg with comma"']


