web-dev-qa-db-fra.com

Comment puis-je diviser une chaîne avec un délimiteur de chaîne?

J'ai cette ficelle:

My name is Marco and I'm from Italy

Je voudrais le scinder, avec le délimiteur is Marco and, donc je devrais obtenir un tableau avec

  • My name en [0] et
  • I'm from Italy en [1].

Comment puis-je le faire avec C #?

J'ai essayé avec:

.Split("is Marco and")

Mais il ne veut qu'un seul caractère.

228
markzzz
string[] tokens = str.Split(new[] { "is Marco and" }, StringSplitOptions.None);

Si vous avez un seul séparateur de caractères (comme par exemple ,), vous pouvez le réduire à (notez les guillemets simples):

string[] tokens = str.Split(',');
474
juergen d
.Split(new string[] { "is Marco and" }, StringSplitOptions.None)

Considérez les espaces entourant "is Marco and". Voulez-vous inclure les espaces dans votre résultat ou souhaitez-vous les supprimer? Il est fort possible que vous souhaitiez utiliser " is Marco and " comme séparateur ...

27
Anders Tornblad

Vous divisez une chaîne sur une sous-chaîne assez complexe. J'utiliserais des expressions régulières au lieu de String.Split. Ce dernier est plus pour vous tokeniser le texte.

Par exemple:

var rx = new System.Text.RegularExpressions.Regex("is Marco and");
var array = rx.Split("My name is Marco and I'm from Italy");
18
Huusom

Essayez cette fonction à la place.

string source = "My name is Marco and I'm from Italy";
string[] stringSeparators = new string[] {"is Marco and"};
var result = source.Split(stringSeparators, StringSplitOptions.None);
12
DanTheMan

Vous pouvez utiliser la méthode IndexOf pour obtenir un emplacement de la chaîne et la scinder en utilisant cette position et la longueur de la chaîne de recherche.


Vous pouvez également utiliser une expression régulière. Un simple recherche google s'est avéré avec ceci

using System;
using System.Text.RegularExpressions;

class Program {
  static void Main() {
    string value = "cat\r\ndog\r\nanimal\r\nperson";
    // Split the string on line breaks.
    // ... The return value from Split is a string[] array.
    string[] lines = Regex.Split(value, "\r\n");

    foreach (string line in lines) {
        Console.WriteLine(line);
    }
  }
}
8
Patrick

Lire Exemples de chaînes de découpage C # - Perles de filet et la solution peut être quelque chose comme:

var results = yourString.Split(new string[] { "is Marco and" }, StringSplitOptions.None);
7
Guillaume Slashy

Il existe une version de string.Split qui prend un tableau de chaînes et un paramètre StringSplitOptions:

http://msdn.Microsoft.com/en-us/library/tabh47cf.aspx

5
Charles Lambert