2015-08-26 92 views
2

使用Go時,我的字符串分割技能非常差。我不知道爲什麼,但我無法將自己的頭圍繞在這一塊上,我試過不同的方式去做我需要的東西,但我總是得到錯誤的輸出。在Go中的某些參數之前和之後分割字符串

我有這個字符串:

https://docs.google.com/spreadsheets/d/1k2RNDSh6K7jH3fezjjfgVrHqVstBF569al4F28hqAM/edit#gid=0 

我需要從這個URL,它是後「/ d /」,直到下一個「/」中的一個關鍵。

因此,在這種情況下,關鍵是:

1k2RNDSh6K7jH3fezjjfgVrHqVstBF569al4F28hqAM 

我怎麼會去這樣做呢?

回答

6

strings.Index可以幫助您與此:

s := "https://docs.google.com/spreadsheets/d/1k2RNDSh6K7jH3fezjjfgVrHqVstBF569al4F28hqAM/edit#gid=0" 
i := strings.Index(s, "/d/") + len("/d/") 
j := strings.Index(s[i:], "/") + i 
fmt.Println(s[i:j]) // Prints "1k2RNDSh6K7jH3fezjjfgVrHqVstBF569al4F28hqAM" 

遊樂場:http://play.golang.org/p/Mqnnc_tNFk

+1

注意,如果以指數收益'第二個電話-1'因爲' 「/」'未找到此可能會出現混亂。然後在's [i:j]'裏出現'i> j''這會引起恐慌。 – Brainstorm

3

我從來沒有使用過 「走出去」,但它看起來像你可以利用

func Split(s, set string) []string 

例子:

fmt.Printf("%q\n", strings.Split("https://docs.google.com/spreadsheets/d/1234567890/edit#gid...", "/")) 

將返回數組

["https:" "" "docs.google.com" "spreadsheets" "d" "1234567890" "edit#gid..."] 
-1

有很多的替代品做到這一點,這是我用正則表達式的那個。

s := "https://docs.google.com/spreadsheets/d/1k2RNDSh6K7jH3fezjjfgVrHqVstBF569al4F28hqAM/edit#gid=0" 
re := regexp.MustCompile("/d/(.*)?/").FindAllStringSubmatch(s, -1) 
fmt.Println("found the pattern :", re[0][1]) 

https://play.golang.org/p/l6B4AE-4to

+3

[Go中的基準](https://golang.org/pkg/testing/#hdr-Benchmarks)很容易,所以如果它「會更快」,這並不意見。對於這樣一個簡單的任務使用正則表達式是[〜17×慢](https://play.golang.org/p/OM8a51129d),並且執行三比零分配(並且這是在全局中僅對一次正則表達式進行預編譯)。 –

相關問題