Expresión regular de Python para eliminar todos los corchetes y sus contenidos.

Estoy tratando de usar esta expresión regular para eliminar todas las instancias de los corchetes (y todo lo que contienen) de las cadenas. Por ejemplo, esto funciona cuando solo hay un par de corchetes en la cadena:

import re pattern = r'\[[^()]*\]' s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.""" t = re.sub(pattern, '', s) print t 

Lo que obtengo es correcto:

 >>>Issachar is a rawboned donkey lying down among the sheep pens. 

Sin embargo, si mi cadena contiene más de un conjunto de corchetes, no funciona. Por ejemplo:

 s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]""" 

Yo obtengo:

 >>>Issachar is a rawboned 

Necesito que la expresión regular funcione, sin importar cuántos corchetes haya en la cadena. La respuesta correcta debe ser:

 >>>Issachar is a rawboned donkey lying down among the sheep pens. 

He investigado y probado muchas permutaciones en vano.

Por defecto * (o + ) coincide con avidez, por lo que el patrón dado en la pregunta coincidirá con el último ] .

 >>> re.findall(r'\[[^()]*\]', "Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]") ['[a] donkey lying down among the sheep pens.[b]'] 

? Anexando ? después del operador de repetición ( * ), puede hacer que coincida de manera no codiciosa.

 >>> import re >>> pattern = r'\[.*?\]' >>> s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]""" >>> re.sub(pattern, '', s) 'Issachar is a rawboned donkey lying down among the sheep pens.' 

Tratar:

 import re pattern = r'\[[^\]]*\]' s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]""" t = re.sub(pattern, '', s) print t 

Salida:

 Issachar is a rawboned donkey lying down among the sheep pens.