Sie haben Recht: reguläre Ausdrücke sollten nicht immer das erste Werkzeug, das in den Sinn kommt, wenn Strings Parsen, vor allem, wenn es potenziell beteiligten Strukturen verschachtelt werden könnten.
Es ist relativ einfach, die Klammern zu zählen und entsprechend handeln:
def filter_parens(sentence):
result, level = [], 0
for c in sentence:
if c == '(':
level += 1
elif c == ')':
level = max(0, level-1)
elif level == 0:
result.append(c)
return ''.join(result)
Mit etwas Phantasie kann man es verlängern Klammern oder von Whitespace elminate auch:
def filter_parens(sentence):
result, level, whitespace = [], 0, False
for c in sentence:
if c == '(':
level += 1
continue
if c == ')':
level = max(0, level-1)
continue
if level:
continue
if c.isspace() and not whitespace:
whitespace = True
result.append(c)
continue
if c.isspace():
continue
whitespace = False
result.append(c)
return ''.join(result)
was tun willst du mit dem Leerzeichen machen? – hop