Espressione regolare per estrarre il testo tra parentesi quadre

Semplice domanda regex. Ho una stringa nel seguente formato:

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

Qual è l’espressione regolare per estrarre le parole tra parentesi quadre, ad es.

 sample some another one 

Nota: nel mio caso d’uso, le parentesi non possono essere nidificate.

Puoi utilizzare la seguente espressione regolare a livello globale :

 \[(.*?)\] 

Spiegazione:

  • \[ : [ è un metacarattere e deve essere sfuggito se vuoi abbinarlo alla lettera.
  • (.*?) : abbina tutto in modo non avido e catturalo.
  • \] : ] è un metacarattere e deve essere sfuggito se vuoi abbinarlo alla lettera.

Questo dovrebbe funzionare ok:

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

catturerà il contenuto senza parentesi

(? < = [) - lookbeben positivo per [

. *? - corrispondenza non avida per il contenuto

(? =]) - lookahead positivo per]

EDIT: per parentesi annidate la regex di seguito dovrebbe funzionare:

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

Le parentesi possono essere annidate?

In caso contrario: \[([^]]+)\] corrisponde a un elemento, comprese le parentesi quadre. Backreference \1 conterrà l’elemento da abbinare. Se il tuo sapore regex supporta il lookaround, usa

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

Questo corrisponderà solo alla voce tra parentesi.

(?< =\().*?(?=\)) funziona bene come spiegato sopra. Ecco un esempio di 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'" 

Questo codice estrarrà il contenuto tra parentesi quadre e parentesi

 (?:(?< =\().+?(?=\))|(?<=\[).+?(?=\])) (?: 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]+[]]) 

Sopra dovrebbe funzionare dato la seguente spiegazione

  • i caratteri racchiusi tra parentesi quadre [] definisce la class characte, che significa che il modello deve corrispondere almeno a un charcater menzionato tra parentesi quadre

  • \ s specifica uno spazio

  • + significa almeno uno dei caratteri precedentemente menzionati in +.