2 回答

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

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 的基準測試運行時,該示例的性能遠好于正則表達式選項。
- 2 回答
- 0 關注
- 140 瀏覽
添加回答
舉報