1 回答
TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
該FindAllStringIndex()函數(shù)返回字節(jié)的位置,而不是符文。
您需要import "unicode/utf8"并使用utf8.RuneCountInString(text[:pos[0][0]])等等,而不是pos[0][0]確保您計(jì)算 Unicode 代碼點(diǎn)而不僅僅是字節(jié):
// You can edit this code!
// Click here and start typing.
package main
import (
"regexp"
"testing"
"unicode/utf8"
"github.com/stretchr/testify/require"
)
func TestA(t *testing.T) {
text := "???? [URGENT] Les forces de dissuasion #nucleaire de la #Russie"
var re = regexp.MustCompile(`#\w+`)
pos := re.FindAllStringIndex(text, -1)
require.Equal(t, utf8.RuneCountInString(text[:pos[0][0]]), 37)
require.Equal(t, utf8.RuneCountInString(text[:pos[0][1]]), 47)
require.Equal(t, utf8.RuneCountInString(text[:pos[1][0]]), 54)
require.Equal(t, utf8.RuneCountInString(text[:pos[1][1]]), 61)
}
請(qǐng)參閱Go 演示。
此外,#\w+是一個(gè)較短的模式來匹配 a #,然后是一個(gè)或多個(gè)字母、數(shù)字或下劃線。
- 1 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報(bào)
