2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
您的正則表達(dá)式有兩個(gè)問(wèn)題。插入符號(hào) ( ^
) 表示您只想匹配字符串的開(kāi)頭,因此根據(jù)定義您只會(huì)得到一個(gè)結(jié)果。另一個(gè)問(wèn)題是 the*
是一個(gè)貪婪的量詞,這意味著它將盡可能多地匹配之前的字符集。這意味著正則表達(dá)式將一直搜索到后綴的字符串末尾,只有在找不到時(shí)才回溯。你想要的是一個(gè)不情愿的量詞, so *?
,它只匹配滿足正則表達(dá)式的最少字符數(shù)。
放在一起,您的正則表達(dá)式字符串應(yīng)該是"1324[0-9a-zA-Z]*?0d0a"
. 我在 Go 操場(chǎng)上測(cè)試了它,它似乎得到了你想要的結(jié)果。https://go.dev/play/p/qolk3vHNxKT

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
在關(guān)鍵字上使用strings.Split1324然后在每個(gè)條目上加上前綴會(huì)簡(jiǎn)單得多。
該results類(lèi)型是一段字符串,每個(gè)字符串由提供的分隔符分隔。迭代一次以在定界符前面添加前綴以獲得所需的結(jié)果
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]))
}
}
}
請(qǐng)注意,在我的 M1 Macbook Pro 上,Split()當(dāng)使用 Go 的基準(zhǔn)測(cè)試運(yùn)行時(shí),該示例的性能遠(yuǎn)好于正則表達(dá)式選項(xiàng)。
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)