Eliminar texto entre () y en python

Tengo una cadena de texto muy larga con () y [] en ella. Estoy tratando de eliminar los caracteres entre paréntesis y corchetes, pero no puedo averiguar cómo.

La lista es similar a esta:

 x = "This is a sentence. (once a day) [twice a day]" 

Esta lista no es con la que estoy trabajando, pero es muy similar y mucho más corta.

Gracias por la ayuda.

Esto debería funcionar para los parens. las expresiones regulares “consumirán” el texto que ha coincidido, por lo que no funcionará para los parentes nesteds.

 import re regex = re.compile(".*?\((.*?)\)") result = re.findall(regex, mystring) 

o esto encontraría un conjunto de parens … simplemente bucle para encontrar más

 start = mystring.find( '(' ) end = mystring.find( ')' ) if start != -1 and end != -1: result = mystring[start+1:end] 

Puede utilizar la función re.sub.

 >>> import re >>> x = "This is a sentence. (once a day) [twice a day]" >>> re.sub("([\(\[]).*?([\)\]])", "\g<1>\g<2>", x) 'This is a sentence. () []' 

Si desea eliminar el [] y el () puede usar este código:

 >>> import re >>> x = "This is a sentence. (once a day) [twice a day]" >>> re.sub("[\(\[].*?[\)\]]", "", x) 'This is a sentence. ' 

Importante: este código no funcionará con símbolos nesteds

Ejecute este script, funciona incluso con paréntesis nesteds.
Utiliza pruebas lógicas básicas.

 def a(test_str): ret = '' skip1c = 0 skip2c = 0 for i in test_str: if i == '[': skip1c += 1 elif i == '(': skip2c += 1 elif i == ']' and skip1c > 0: skip1c -= 1 elif i == ')'and skip2c > 0: skip2c -= 1 elif skip1c == 0 and skip2c == 0: ret += i return ret x = "ewq[a [(b] ([c))]] This is a sentence. (once a day) [twice a day]" x = a(x) print x print repr(x) 

En caso de que no lo ejecutes,
Aquí está la salida:

 >>> ewq This is a sentence. 'ewq This is a sentence. ' 

Aquí hay una solución similar a la respuesta de @pradyunsg (funciona con corchetes nesteds arbitrarios):

 def remove_text_inside_brackets(text, brackets="()[]"): count = [0] * (len(brackets) // 2) # count open/close brackets saved_chars = [] for character in text: for i, b in enumerate(brackets): if character == b: # found bracket kind, is_close = divmod(i, 2) count[kind] += (-1)**is_close # `+1`: open, `-1`: close if count[kind] < 0: # unbalanced bracket count[kind] = 0 # keep it else: # found bracket to remove break else: # character is not a [balanced] bracket if not any(count): # outside brackets saved_chars.append(character) return ''.join(saved_chars) print(repr(remove_text_inside_brackets( "This is a sentence. (once a day) [twice a day]"))) # -> 'This is a sentence. '