我想知道是否有任何方法可以輕鬆地在空格處拆分字符串,除非空格在引號內時?在空格處拆分一個字符串,除了在引號內 - 走
例如,改變
Foo bar random "letters lol" stuff
成
Foo
,bar
,random
和"letters lol"
stuff
我想知道是否有任何方法可以輕鬆地在空格處拆分字符串,除非空格在引號內時?在空格處拆分一個字符串,除了在引號內 - 走
例如,改變
Foo bar random "letters lol" stuff
成
Foo
,bar
,random
和"letters lol"
stuff
想想吧。您的逗號分隔值(CSV)文件格式爲RFC4180,除了您的分隔符(外部引號對)是空格(而不是逗號)以外的字符串。例如,
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
s := `Foo bar random "letters lol" stuff`
fmt.Printf("String:\n%q\n", s)
// Split string
r := csv.NewReader(strings.NewReader(s))
r.Comma = ' ' // space
fields, err := r.Read()
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nFields:\n")
for _, field := range fields {
fmt.Printf("%q\n", field)
}
}
遊樂場:https://play.golang.org/p/Ed4IV97L7H
輸出:
String:
"Foo bar random \"letters lol\" stuff"
Fields:
"Foo"
"bar"
"random"
"letters lol"
"stuff"
這不是我真正想要的輸出。例如,我想要把'lol'寫在引號中,而其他的不是。另外,我在這個問題上做得不是很好...... 我打算用它來將blockdata 8539 58 584 {CustomName:「Foo」}'分成'blockdata','8539','58 ','584','{CustomName:「Foo」} ...應該提到這一點。 –
你可以使用regex
這(go playground)將覆蓋引號內和多個多個字所有的用例所列數據:
package main
import (
"fmt"
"regexp"
)
func main() {
s := `Foo bar random "letters lol" stuff "also will" work on "multiple quoted stuff"`
r := regexp.MustCompile(`[^\s"']+|"([^"]*)"|'([^']*)`)
arr := r.FindAllString(s, -1)
fmt.Println("your array: ", arr)
}
輸出將是:
[Foo, bar, random, "letters lol", stuff, "also will", work, on, "multiple quoted stuff"]
如果您想了解更多關於正則表達式這裏是一個偉大的SO超方便的資源在最後回答 - Learning Regular Expressions
希望這有助於
[這也是非常好的](https://play.golang.org/p/NmruUq82qE),輸出:'Foo,bar,random,letters lol,stuff',區別在於:''字母大聲笑'' –