-1
votes

Obtenez toutes les cordes entre deux caractères dans une corde

J'ai une corde comme celle-ci:

{abc} @ {defgh} mner {123}

Comment puis-je obtenir toutes les chaînes entre { et } comme tableau ou liste?

comme ceci:

{{abc}, {defgh}, {123}}


12 commentaires

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} ? Ou ce asd {asd ?


@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}


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


7 Réponses :


2
votes

Utiliser regex est un bon choix

    string str = "{abc}@{defgh}mner{123}";
    foreach (Match match in Regex.Matches(str,"{[^}]+}"))
    {
        Console.WriteLine(match.Value);
    }


0 commentaires

1
votes

Utilisation de sites comme Regexr, vous pouvez facilement essayer votre regex avant de l'utiliser dans le code: xxx

https://regexr.com/460A3


0 commentaires

0
votes
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();  

0 commentaires

0
votes

Vous pouvez utiliser REGEX

{abc} 
{defgh} 
{123} 


0 commentaires

0
votes

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();
  • {: trouver un { li>
  • (: Démarrer la capture de groupe de données LI>
  • \ W +: Faites correspondre un ou plusieurs caractères de mots (A à Z, 0 à 9) li>
  • ): fin de capture li>
  • ): Trouver A} LI> ul>

    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>


  • 0 commentaires

    0
    votes

    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));
      }
    }
    


    0 commentaires

    0
    votes
    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

    0 commentaires