2 votes

diviser une chaîne de caractères avec un caractère de début et de fin

J'ai besoin de diviser une chaîne de caractères avec une "séquence variable"

Par exemple, j'ai cette chaîne de caractères :

string myString="|1 Test 1|This my first line.|2 Test 2|This is my second line";

J'ai besoin d'obtenir un tableau de chaînes de caractères avec :

Voici ma première ligne
C'est ma deuxième ligne.

Et en même temps, le meilleur des meilleurs serait d'obtenir ceci :
|1 Test1|
Voici ma première ligne
|2 Test2|
C'est ma deuxième ligne.

Une aide ?

5voto

James Points 40024

Vous pouvez utiliser une expression régulière pour diviser la chaîne, par exemple

string str = "|1 Test 1|This is my first line.|2 Test 2|This is my second line.";
var pattern = @"(\|(?:.*?)\|)";
foreach (var m in System.Text.RegularExpressions.Regex.Split(str, pattern))
{
    Console.WriteLine(m);
}

Il suffit d'écarter la première entrée (qui sera vide).

2voto

mtijn Points 2036

string.Split avec | comme paramètre et pour les sous-chaînes si string.StartsWith un nombre et string.EndsWidth un nombre ajouter | au début et à la fin. est-ce assez utile ?

1voto

The Evil Greebo Points 3491
string[] myStrings = myString.Split('|');

Vous obtiendrez ainsi un tableau à 4 éléments composé de :

1 Test 1
This is my first line.
2 Test 2
This is my second line.

À partir de là, je pense que vous serez obligé d'itérer à travers les éléments du tableau et de déterminer la marche à suivre pour l'élément suivant en fonction du contenu de l'élément actuel.

1voto

Simon Skov Boisen Points 2235

En utilisant LINQ, vous pouvez procéder comme suit :

public IEnumerable<string> GetLines(string input)
{
    foreach (var line in input.Split(new [] {'|' }, StringSplitOptions.RemoveEmptyEntries))
    {
        if (Char.IsDigit(line[0]) && Char.IsDigit(line[line.Length - 1]))
            yield return "|" + line + "|";

        yield return line;
    }
}

0voto

Burimi Points 3449
string myString = "|1 Test 1|This my first line.|2 Test 2|This is my second line";
            string[] mainArray = myString.Split('|');
            String str = "";
            List<string> firstList = new List<string>();
            List<string> secondList = new List<string>();
            for (int i = 1; i < mainArray.Length; i++)
            {
                if ((i % 2) == 0)
                {
                    str += "\n|" + mainArray[i];
                    firstList.Add(mainArray[i]);
                }
                else
                {
                    str += "\n|" + mainArray[i] + "|";
                    secondList.Add(mainArray[i]);
                }
            }

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