我需要在符號上拆分一大塊文本,但只有當它位于單引號之外時。文本將如下所示:+Some.data:'some+value'+some.more.data:9+yet.more.data:'rock+roll'它應該成為三個值的切片:一些數據:“一些+價值”更多 數據:9然而,更多數據:“搖滾樂”我發現類似的問題使用正則表達式來做到這一點,但這需要向前看,這是golang正則表達式引擎所沒有的。我還在沒有前瞻的情況下創建自己的正則表達式:'.*?'(\+)|[^']*(\+)但是,這似乎在第三項上分崩離析,它在in上分裂。+'rock+roll'我考慮過可能做一個字符串拆分,然后驗證每個切片以確保它不是部分表達式,然后如果是,則將碎片拼接在一起,但它將相當復雜,如果可能的話,我想避免它。+目前,我認為最好的解決方案是識別引號內的文本(我可以很容易地用正則表達式做到這一點),要么對該文本進行URL編碼,要么用加號做其他事情,拆分文本,然后URL解碼表達式以取回引號內的符號,但我想知道是否有更好的方法。+有誰知道一種方法可以使用正則表達式在引號之外的符號上拆分而不進行前瞻?有誰能想到比我的URL編碼/解碼方法更簡單的解決方案?+
1 回答

GCT1015
TA貢獻1827條經驗 獲得超4個贊
純代碼可以更容易:
func split(s string) []string {
var result []string
inquote := false
i := 0
for j, c := range s {
if c == '\'' {
inquote = !inquote
} else if c == '+' && !inquote {
result = append(result, s[i:j])
i = j +1
}
}
return append(result, s[i:])
}
- 1 回答
- 0 關注
- 98 瀏覽
添加回答
舉報
0/150
提交
取消