2016-05-17 4 views
4

Ich möchte einen String spalten wo auch immer die ' Zeichen vorhanden ist, es sei denn, es ein Fragezeichen vor es ist (?') - in diesem Fall ich nicht teilen möchten.
Was ist der beste Weg, um das zu tun?
Ich bin Spaltung wie so (wenn das Trennzeichen ist ein Char):Splitting String mit "'", aber nicht "?' "

message.Split(New Char() {"'"C}) 

Und wenn es ein String:

message.Split(New String() {"break"}, StringSplitOptions.None) 

Muss ich dann in der angegebenen Array jedes Element testen Sehen Sie, ob es mit einem ? Zeichen endet, und verketten Sie dann die Strings wieder - das scheint einfach nicht wie eine optimale Lösung ..?
Müssen Sie einen regelmäßigen Ausdruck machen, und wie würden Sie das in vb.net tun?

Antwort

5

Sie erhalten eine Regex.Split mit einem (?<!\?)' regex müssen:

Regex.Split(message, "(?<!\?)'") 

das Sehen regex demo

Die (?<!\?) negativen Lookbehind, das Spiel wird scheitern, wenn eine wörtliche ? rechts nach links des einzelnen Apostroph erscheint.

In VB.NET, können Sie Linq verwenden, um alle leeren Saiten Sie mit dieser Regex Split erhalten zu entfernen:

Dim message As String = "'sss?'ss'" 
Dim my_result() As String = Regex.Split(message, "(?<!\?)'") _ 
     .Where(Function(strn As String) String.IsNullOrWhiteSpace(strn) = False) _ 
     .ToArray() 
Console.WriteLine(String.Join(", ", my_result)) 
' => sss?'ss 

enter image description here

+2

Thanks man! Genau das habe ich gesucht. –