515 votes

Expression régulière pour extraire le texte entre crochets

Question simple sur les regex. J'ai une chaîne au format suivant :

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

Quelle est l'expression régulière permettant d'extraire les mots entre crochets, c'est-à-dire

sample
some
another one

Remarque : dans mon cas d'utilisation, les parenthèses ne peuvent pas être imbriquées.

4voto

Tony Ladson Points 896

En R, essayez :

x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"

4voto

ßãlãjî Points 95

si vous voulez filtrer uniquement les petites lettres de l'alphabet entre crochets a-z

(\[[a-z]*\])

si vous voulez les lettres minuscules et majuscules a-zA-Z

(\[[a-zA-Z]*\]) 

si vous voulez des petites capitales et la lettre numérique a-zA-Z0-9

(\[[a-zA-Z0-9]*\]) 

si vous voulez tout entre crochets

si vous voulez du texte, des chiffres et des symboles

(\[.*\])

3voto

spoorthy.ks Points 19
([[][a-z \s]+[]])

Ce qui précède devrait fonctionner compte tenu de l'explication suivante

  • Les caractères entre crochets[] définissent la classe de caractères, ce qui signifie que le motif doit correspondre à au moins un caractère mentionné entre crochets.

  • \s spécifie un espace

  •  + signifie au moins un des caractères mentionnés précédemment à +.

0 votes

Dans les cas sensibles A-Z devrait s'ajouter au modèle : ([[][a-zA-Z \s]+[]]) ; je pense que c'est une bonne façon, alors que \ dans les modèles de regex qui sont définis dans des chaînes de caractères ( " et ' ) et de confondre les débutants par la manipulation des backslashs dans les utilisations de " ou ' !

0 votes

La seule réponse qui a fonctionné pour moi pour le regex C++ (sauf que je le fais avec des guillemets au lieu de parenthèses). std::regex pattern{R"(["][a-zA-Z \s]+["])"};

2voto

citynorman Points 1131

J'avais besoin d'inclure les nouvelles lignes et d'inclure les parenthèses.

\[[\s\S]+\]

1voto

mrt Points 1919

Si quelqu'un veut faire correspondre et sélectionner une chaîne de caractères contenant un ou plusieurs points entre crochets comme " [fu.bar] "Utilisez ce qui suit :

(?<=\[)(\w+\.\w+.*?)(?=\])

Testeur de Regex

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X