2012-11-22 46 views
0

我有這個字符串:分割字符串,但保持分隔符

S40102S40078S40079S40080S40053S40052S40051S40050

,但我的

Dim MyArray() As String = MyString.Split("S") 

代碼刪除在S,但我想保持它,我已經試過RegEx,但我無法得到它的工作,任何幫助非常感激。

感謝

+2

如果你知道你在分裂,你爲什麼需要保留它?你需要保留它在哪裏?每個「分裂」的開始?結束?都? – Oded

回答

0

您可以使用零長度匹配正向前查找和分裂的「S」前:(?=S)

我希望這部作品在VB。

謝謝@Oded您的評論。爲了避免在第一個S上分割,你可以這樣做:(?=[^\a]S)

+0

第一個結果將是空的。所有其他結果在開始時將包含'S',這可能或不可能是OP的結果。 – Oded

+0

謝謝。看我的編輯。 – davidrac

+0

Oded,你的(?= S)爲我做了訣竅,並且在將它添加到ComobBox之前,我剛從數組中移除了第一個結果。謝謝 – user1295053

0

嘗試在S之前的數字之間添加一個分隔符,然後在該分隔符上進行拆分。例如

Dim MyArray() As String = Regex.Replace(MyString, "(\d)S", "$1-S").Split("-") 

注:VB.NET是不是我的第一語言,所以請檢查語法是否正確

0

我認爲,正則表達式會在這方面努力。就像這樣:

Dim input As String = "S40102S40078S40079S40080S40053S40052S40051S40050" 
Dim regex As Regex = New Regex("([^S])*[S]") 
Dim ms As MatchCollection = regex.Matches(input) 
Dim MyArray() As String 
Dim ctr As Integer = 0 

'loop through them all 
foreach(m As Match In ms) 
{ 
    'assign to array 
    MyArray(ctr) = m.Value 

    'increase counter 
    ctr += 1 
} 

這是未經測試的,並且是來自C#的端口,因此語法可能有點偏離,但它非常接近。