10
votes

Comment extraire le contenu des crochets dans une chaîne de texte en C # à l'aide de Regex

Si j'ai une chaîne de texte comme ci-dessous, comment puis-je collectionner le contenu des supports dans une collection en C # même si cela passe des pauses de ligne?

... p>

string s = "test [4df] test [5yu] test [6nf]";


0 commentaires

4 Réponses :


4
votes
Regex regex = new Regex(@"\[[^\]]+\]", RegexOptions.Multiline);

1 commentaires

@ "[([^]] *)]" semble être un modèle préféré.



1
votes

La clé consiste à échapper correctement aux caractères spéciaux utilisés dans des expressions régulières, vous pouvez par exemple correspondre à un caractère [ de cette manière: @ "\ ["


0 commentaires

20
votes

Vous pouvez le faire avec des expressions régulières et un peu de linq. xxx

sortie: xxx

Voici quelle expression régulière Moyens: xxx


2 commentaires

Merci pour la réponse, je joue, mais incapable de le gérer - comment puis-je changer la regex de sorte qu'il y ait des crochets?


Ça m'a pris un certain temps d'ingénierie inverse que cela a permis de réaliser que vous accédez au deuxième élément dans les groupes de matchs [1] qui vous donne 4DF, etc., plutôt qu'avec les crochets [4DF], etc.



1
votes
Regex rx = new Regex(@"\[.+?\]");
var collection = rx.Matches(s);
You will need to trim the square brackets off, the important part is the lazy operator.

3 commentaires

Ne fonctionnera pas sur plusieurs lignes, même si vous spécifiez RegExoption.Multiline (je sais, j'ai essayé;))


Fonctionne à travers plusieurs lignes fines pour moi


Vous pouvez utiliser Regex.Singline - Cela fonctionne presque, sauf qu'il capture le \ N aussi. En fait, cela aurait probablement même une performance légèrement supérieure à la solution que j'ai présentée car elle ne doit être remplacée que sur les parties capturées de la chaîne plutôt que la chaîne entière.