Expresión regular para extraer texto entre corchetes

Pregunta simple de expresiones regulares Tengo una cadena en el siguiente formato:

this is a [sample] string with [some] special words. [another one] 

¿Cuál es la expresión regular para extraer las palabras entre corchetes, es decir.

 sample some another one 

Nota: En mi caso de uso, los corchetes no se pueden anidar.

Puede usar la siguiente expresión regular a nivel mundial :

 \[(.*?)\] 

Explicación:

  • \[ : [ es un meta char y necesita ser escapado si quieres unirlo literalmente.
  • (.*?) : empareja todo de una manera no codiciosa y captúralo.
  • \] : ] es un meta char y necesita ser escapado si quieres unirlo literalmente.

Esto debería funcionar bien:

 \[([^]]+)\] 
 (?< =\[).+?(?=\]) 

capturará contenido sin corchetes

(? < = [) - mirada positiva detrás de [

. *? - Partido no codicioso para el contenido

(? =]) - búsqueda positiva para]

EDITAR: para los paréntesis nesteds, la siguiente expresión regular debería funcionar:

 (\[(?:\[??[^\[]*?\])) 

¿Se pueden anidar los corchetes?

Si no: \[([^]]+)\] coincide con un elemento, incluidos los corchetes. Backreference \1 contendrá el elemento que se emparejará. Si su sabor regex admite lookaround, use

 (?< =\[)[^]]+(?=\]) 

Esto solo coincidirá con el elemento entre corchetes.

(?< =\().*?(?=\)) funciona bien según la explicación dada anteriormente. Aquí hay un ejemplo de Python:

 import re str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')" re.search('(?< =\().*?(?=\))', str).group() "'formPagination_bottom',2,'Page',true,'1',null,'2013'" 

Este código extraerá el contenido entre corchetes y paréntesis

 (?:(?< =\().+?(?=\))|(?<=\[).+?(?=\])) (?: non capturing group (?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses | or (?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets 
 ([[][az \s]+[]]) 

Más arriba debería funcionar dada la siguiente explicación

  • los caracteres entre corchetes [] definen la clase de caracteres que significa que el patrón debe coincidir al menos con un carácter mencionado entre corchetes

  • \ s especifica un espacio

  • + significa por lo menos uno de los caracteres mencionados previamente a +.