2012-06-15 184 views
0

如何從這個字符串切割部分的一部分......如何削減串

"abb.c.d+de.ee+f.xxx+qaa.+.,,s," 

...在那裏我知道位置通過這樣的:「」

結果總是之間(結果的左側)和「+」(右側)。 我知道數字「。」從左側數字和從右側數字「+」,來分隔結果字符串。

問題是右側,因爲我需要從末尾數「+」。

說...

從左側:begining在五·四 「」
(這是容易),結果是=

"xxx+qaa.+.,,s," 

從右側:端是在第二個 「+」 從端!

"xxx[here]+qaa.+.,,s," 

結果=

"xxx" 

我嘗試用.substring和.indexOf要做到這一點我自己,但沒有成功...

任何想法?謝謝

回答

0

你可以使用StrReverse函數扭轉字符序列,然後從左側計數+(使用相同的方法,計數.)的端部。

+0

沒問題。 'StrReverse',我總是忘了這個。謝謝。 – ns27

0

要查找子字符串的開頭,請從左側循環顯示字符串。計算你所看到的.的數量,當你點擊你想要的數字時停止。將索引存儲在一些變量中,如start

類似地找到子串的結尾,從右邊循環並計數+ s。

0

您可以使用正則表達式解決這個問題:

Dim r As New Regex("^(.*\.){4}(?<value>.*)(\+.*){2}$") 
Dim m As Match = r.Match("abb.c.d+de.ee+f.xxx+qaa.+.,,s,") 
Dim result As String = m.Result("${value}") 

說明

  • ^表示字符串的開頭
  • (.*\.){4}這意味着任何字符(.)重複任意次(*),然後是一段時間(\.)。這段時間必須使用反斜槓進行轉義,否則時間段將是任意字符通配符。 .*\.包含在(){4}中,表示該模式必須重複四次。
  • (?<value>.*)這指定了我們之後的文本的佔位符。 value是我們分配給它的名稱。 .*指定該值是任意數量的任何字符。
  • (\+.*){2}這意味着一個加號(必須轉義),後面跟着任意數量的任意字符,重複兩次。
  • $指示串
+0

謝謝,但現在正則表達式對我來說太複雜了。一旦我將嘗試學習.. – ns27

+0

沒問題。你只能使用你理解的東西,這很好。這是一個糟糕的程序員的標誌,他們只是複製並粘貼了一堆他們不明白的代碼,然後讓它工作。它最終無法很好地發揮作用。我自己對Regex的經驗並不多,主要是因爲還沒有太多的需求,但我建議在某個時候適應它。它的優越性在於,您可以將所有邏輯存儲爲簡單的字符串設置(如有必要)。而且,雖然閱讀起來很難看,但寫起來實際上比你期望的要容易得多。 –