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 +.