2016-09-08 5 views
0

Ich habe die folllowing String und ich möchte es aufgeteilt:Split string - C# - komplizierte

"INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3)"; 

Die Werte, die ich getrennt sind @Test @ test1 @ test2 @ test3 So kann ich bekommen machen Sie etwas anderes mit jedem

Das ist, was ich bisher so weit habe.

string str = "INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3)" 
var pattern = @"(?<[email protected])[^@]*(?=>,)"; 
foreach (var m in System.Text.RegularExpressions.Regex.Split(str, pattern)) 
    { 
     Console.WriteLine(m); 
    } 

Dies gibt die gesamte Zeichenfolge:

INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3) 

Ich hoffe, dass einige von euch kann mir helfen, weil es das letzte Stift für mein Programm ist zu arbeiten.

+0

Der Punkt ist: Wie kann man die Grenzen bestimmen Wo beginnen und enden diese Werte? Wenn Sie einen Regex verwenden möchten, sollte er wissen, wo er mit dem Matching beginnen soll und wo er enden soll. –

+0

Ich kann es bei @ und at teilen, und bei @ später aber immer noch wie mache ich das. –

+0

Ok, versuche 'Regex.Matches (str, @" @ \ w + ") .Guss () .Wähle (p => p.Wert) .ToList()'. Zu diesem Zeitpunkt sollte Kells Antwort genauso funktionieren. Nun, mit der Ausnahme, dass die Regex nur Wortzeichen nach '@' abgleicht. –

Antwort

1

Nun, ich bin nicht gern reguläre Ausdrücke, aber viele Leute sind, also werde ich Sie als eine gute alte String-Methode meine Antwort geben:

var parameters = str.Split('@').Skip(1).Select(var=>"@" + var.Trim(new[] {',',')', ' '})); 
+1

Und meine Variante: 'str.Split ('', '(', ')', ''). Wo (s => s.StartsWith (" @ "))' Split dauert ein params Array, so dass Sie keine Mühe haben, ein Array zu erstellen –

+0

funktioniert perfekt und ich verstehe sogar, warum ich danke Ihnen! –

1

Hatten Sie versuchen string pattern = @"@[a-zA-Z0-9]+";?

+0

In der ersten Zeile es INSERT INTO Test ist (Test, test1, test2, test3) Werte ( zweite, dritte, 4., 5.) leid es alles auf der gleichen Linie, die Sie lesen müssen platziert es mag die Nummer der Zeile mit dem, was es zurückgibt –

+0

Dies scheint zu arbeiten. Überprüfen Sie [hier] (https://regex101.com/r/wE7tJ8/1) –

+0

@ krw12572: Ja, aber nicht mit 'Regex.Split' (siehe [* Split-Liste * hier] (http://regexstorm.net/Tester? p =% 40% 5ba-zA-Z0-9% 5d% 2b & i = INSERT + INTO + Test + (Test% 2c + Test1% 2c + Test2% 2c + Test3) + Werte + (% 40test% 2c +% 40test1% 2c +% 40test2% 2c +% 40test3))). –