J'ai une corde comme celle-ci: p>
{abc} @ {defgh} mner {123} p> blockQuote>
Comment puis-je obtenir toutes les chaînes entre
{ code> et} code> comme tableau ou liste? p>comme ceci: p>
{{abc}, {defgh}, {123}} code> p>
7 Réponses :
Utiliser regex est un bon choix
string str = "{abc}@{defgh}mner{123}";
foreach (Match match in Regex.Matches(str,"{[^}]+}"))
{
Console.WriteLine(match.Value);
}
Utilisation de sites comme Regexr, vous pouvez facilement essayer votre regex avant de l'utiliser dans le code: https://regexr.com/460A3 p> p>
var input = "{abc}@{defgh}mner{123}";
var pattern = @"\{(.+?)\}";
var matches = Regex.Matches(input, pattern);
IList<string> output = matches.Cast<Match>().Select(x => x.Groups[0].Value).ToList();
output.Dump();
Vous pouvez utiliser REGEX
{abc}
{defgh}
{123}
Utilisation de regex et les transformer dans une liste à l'aide de LINQ
var l = new Regex(@"\{(\w+)\}")
.Matches("{abc}@{defgh}mner{123}l")
.Cast<Match>()
.Select(m => m.Groups[0].Value)
.ToList();
Ceci trouvera tout le texte entre les supports bouclés p>
La regex donnera un matchCollection p>
Nous devons utiliser de lancer pour le transformer en quelque chose de linq peut interroger P>
Nous .Sélectionnez des éléments de la collection, m est un élément individuel, M.Groups [0] .Value est le texte capturé par le groupe, entre les crocs frisés p>
.tolist Renvoie tous les textes d'une liste p> p>
Vous pouvez essayer de suivre le code suivant, il n'utilise pas les expressions régulières. Vous n'avez donc pas besoin de savoir!
static void Main(string[] args)
{
string s = "{abc}@{defgh}mner{123}";
int i1, i2 = 0;
while ((i1 = s.IndexOf('{', i2)) >= 0)
{
i2 = s.IndexOf('}', i1);
// Here you can add Substring result to some list or assign it to a variable...
Console.WriteLine(s.Substring(i1 + 1, i2 - i1 - 1));
}
}
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"{([A-Za-z0-9\-]+)}" ;
string input = "{abc}@{defgh}mner{123}";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
Console.WriteLine();
}
}
Output :
abc
defgh
123
You can check the Online Execution of the code :
http://tpcg.io/uuIxo1
Avez-vous déjà essayé quelque chose? Il y a quelques façons de faire cela
Utiliser des expressions régulières avec des groupes de capture
Oui, j'écris une boucle pour obtenir des chaînes entre {et}, mais ce n'est pas le meilleur moyen. @ shree.pat18
Est-ce possible
{abc}}} @ {defgh} mner {123} code>? Ou ceasd {asd code>?@radin Comment savez-vous que la boucle n'est pas la meilleure façon? Postez votre code pour que nous puissions vous dire. Dites-nous aussi ce qui est "meilleur" pour vous
Dupliqué possible de Obtenez des valeurs entre les bretelles bouclées C # et Beaucoup d'autres .
@Fcin oui, est possible.
@Caiusjard j'ai fait ce lien . Mais ma chaîne est différente.
{asd {asd} dd} 34 {wqw} code>Ouais, je pense que la modification que vous avez faite invalidera beaucoup de réponses ici. Nous ne pouvons pas non plus poster plus de réponses car cette question est fermée en tant que duplicata. Demandez une nouvelle question et mettez la version modifiée; {A {b} c} d {e} est une exigence très différente de {A} b {c} d {e} et nécessite probablement une boucle qui compte les accolades et émet seulement un texte lorsque le compte devient 0
@Caiusjard Ok, merci.
@Bacon i Modifier cette question, veuillez vérifier.
@radin Cette question a été fermée b> en tant que duplicata, quelle était votre question initiale. La nouvelle ajout modifie la portée de la question et, en tant que tel, c'est mieux si vous ouvrez simplement une nouvelle (en général). Dans ce cas particulier, cette question répond ici à votre besoin exact: Stackoverflow.com/Questtions/2778532/...