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]";
4 Réponses :
Regex regex = new Regex(@"\[[^\]]+\]", RegexOptions.Multiline);
@ "[([^]] *)]" semble être un modèle préféré.
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 [ code> de cette manière:
@ "\ [" code> p >
Vous pouvez le faire avec des expressions régulières et un peu de linq. sortie: p> Voici quelle expression régulière Moyens: p>
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.
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.
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.