亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據某些前綴和后綴在 Go 中拆分字符串?

如何根據某些前綴和后綴在 Go 中拆分字符串?

Go
冉冉說 2023-02-21 19:06:29
假設我有這么大的字符串:13242222160a06032c06cf00ca5c160bdc70102dfe0a12bc00a3b101000000cd01d60d0a13242222160a06032c0ccf00ca5bf10bdc74d029d05401fe0a12bc00a3b101000000d1e4270d0a1324222160a06032c1e0a12bc00a3b101000000d233ed0d0a我希望它被拆分成數組,前綴為 1324,后綴為 0d0a。結果是一個包含 3 個元素的數組:arr[0] = 13242222160a06032c06cf00ca5c160bdc70102dfe0a12bc00a3b101000000cd01d60d0aarr[1] = 13242222160a06032c0ccf00ca5bf10bdc74d029d05401fe0a12bc00a3b101000000d1e4270d0aarr[2] = 1324222160a06032c1e0a12bc00a3b101000000d233ed0d0a這是我的代碼:package mainimport (    "fmt"    "regexp")func main() {    var testData = "13242222160a06032c06cf00ca5c160bdc70102dfe0a12bc00a3b101000000cd01d60d0a13242222160a06032c0ccf00ca5bf10bdc74d029d05401fe0a12bc00a3b101000000d1e4270d0a1324222160a06032c1e0a12bc00a3b101000000d233ed0d0a"    re := regexp.MustCompile("^1324[0-9a-zA-Z]*0d0a")    matches := re.FindAllString(testData, -1)    for _, m := range matches {        fmt.Printf("%s\n", m)    }}它只是打印相同的整個字符串,這很可能意味著我的正則表達式是錯誤的。什么是正確的形式?
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

您的正則表達式有兩個問題。插入符號 ( ^) 表示您只想匹配字符串的開頭,因此根據定義您只會得到一個結果。另一個問題是 the*是一個貪婪的量詞,這意味著它將盡可能多地匹配之前的字符集。這意味著正則表達式將一直搜索到后綴的字符串末尾,只有在找不到時才回溯。你想要的是一個不情愿的量詞, so *?,它只匹配滿足正則表達式的最少字符數。

放在一起,您的正則表達式字符串應該是"1324[0-9a-zA-Z]*?0d0a". 我在 Go 操場上測試了它,它似乎得到了你想要的結果。https://go.dev/play/p/qolk3vHNxKT


查看完整回答
反對 回復 2023-02-21
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

在關鍵字上使用strings.Split1324然后在每個條目上加上前綴會簡單得多。


該results類型是一段字符串,每個字符串由提供的分隔符分隔。迭代一次以在定界符前面添加前綴以獲得所需的結果


package main


import (

    "fmt"

    "strings"

)


func main() {

    var output []string

    var testData = "13242222160a06032c06cf00ca5c160bdc70102dfe0a12bc00a3b101000000cd01d60d0a13242222160a06032c0ccf00ca5bf10bdc74d029d05401fe0a12bc00a3b101000000d1e4270d0a1324222160a06032c1e0a12bc00a3b101000000d233ed0d0a"

    results := strings.Split(testData, "1324")

    for idx := range results {

        if len(results[idx]) > 0 {

            output = append(output, fmt.Sprintf("%s%s", "1324", results[idx]))

        }

    }

}

請注意,在我的 M1 Macbook Pro 上,Split()當使用 Go 的基準測試運行時,該示例的性能遠好于正則表達式選項。


查看完整回答
反對 回復 2023-02-21
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號