Frage

Ich möchte das Beispiel String aufgeteilt werden:

  

~ Peter ~ Lois ~ Chris ~ ~ Meg Stewie

auf den Charakter ~ und haben das Ergebnis

  

Peter
  Lois
  Chris
  Meg
  Stewie

eine Standard-Zeichenfolge Split-Funktion Verwendung in JavaScript oder C # das erste Ergebnis natürlich ist ein leerer String. Ich möchte zu vermeiden, das erste Ergebnis zu ignorieren, weil das erste Ergebnis tatsächlich eine leere Zeichenkette sein kann.

Ich habe das Hantieren einen regulären Ausdruck mit der Verwendung und ich bin ratlos. Ich bin sicher, dass jemand gekommen ist über und elegante Lösung dieses Problems.

War es hilfreich?

Lösung

Für Ihre Anforderungen, ich sehe zwei Möglichkeiten:

(1) Die anfänglichen Präfixzeichen, falls vorhanden.

(2) Verwenden Sie einen vollen regulären Ausdruck die Zeichenfolge zu trennen.

Beide sind in diesem Code dargestellt:

using System;
using System.Linq;
using System.Text.RegularExpressions;

class APP { static void Main() {

string s = "~Peter~Lois~Chris~Meg~Stewie";

// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }

// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }

// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
    .OfType<Match>()
    .ToList()
    .ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
    ;
}}

Der reguläre Ausdruck in # 2 entspricht das Begrenzungszeichen durch eine Übereinstimmung Gruppe enthält, gefolgt null oder mehr Nicht-Begrenzungszeichen. Die resultierenden Übereinstimmungen sind die begrenzten Zeichenfolgen (einschließlich leere Strings). Für jedes Spiel „match.Value“ ist die gesamte Zeichenfolge einschließlich der führenden Trennzeichen und „Match.Groups 1 .Wert“ist das erste Spiel-Gruppe das Trennzeichen frei Zeichenfolge enthält.

Zur Vollständigkeit die dritte Codierung (# 3) enthalten ist, die gleiche Methode regulären Ausdrucks in # 2 zeigt, aber in einer LINQ Codierstil.

Wenn Sie mit regulären Ausdrücken zu kämpfen haben, empfehle ich Reguläre Ausdrücke, dritte Ausgabe von Jeffrey EF Friedl . Es ist bei weitem die beste Hilfe zum Verständnis von regulären Ausdrücken und dient später als hervorragende Referenz oder Auffrischung nach Bedarf.

Andere Tipps

In C #, das scheint zu bekommen, was Sie wollen:

"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

Hier ist ein LINQ Ansatz ...

Beachten Sie, mit RegexOptions.ExplicitCapture die Spiele sind nicht enthalten. Ohne sie das ‚~‘ wird auch aufgenommen werden.

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "~Peter~Lois~Chris~Meg~Stewie";
            Regex.Split(s, "(~)", RegexOptions.ExplicitCapture)
                .Where(i=>!String.IsNullOrEmpty(i))
                .ToList().ForEach(i => Console.WriteLine(i));
            Console.ReadLine();
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top