识别推文消息中正确的标签索引
Identify the correct hashtag indexes in tweet messages
我需要在 Twitter 消息(各种语言、表情符号等)中识别正确的索引。
我找不到 returns 这些位置的解决方案,如下例所示。
import (
"regexp"
"testing"
"github.com/stretchr/testify/require"
)
func TestA(t *testing.T) {
text := " [URGENT] Les forces de dissuasion #nucleaire de la #Russie"
var re = regexp.MustCompile(`#([_A-Za-z0-9]+)`)
pos := re.FindAllStringIndex(text, -1)
// FindAllStringIndex returns
// [0][43,53]
// [1][60,67]
// These are the expected positions.
require.Equal(t, pos[0][0], 37)
require.Equal(t, pos[0][1], 47)
require.Equal(t, pos[1][0], 54)
require.Equal(t, pos[1][1], 61)
}
FindAllStringIndex()
函数 returns 字节的位置,而不是符文。
您需要 import "unicode/utf8"
并使用 utf8.RuneCountInString(text[:pos[0][0]])
等而不是 pos[0][0]
以确保您计算的是 Unicode 代码点而不仅仅是字节数:
// 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)
}
参见Go demo。
此外,#\w+
是一个较短的模式,用于匹配 #
和一个或多个字母、数字或下划线。
我需要在 Twitter 消息(各种语言、表情符号等)中识别正确的索引。
我找不到 returns 这些位置的解决方案,如下例所示。
import (
"regexp"
"testing"
"github.com/stretchr/testify/require"
)
func TestA(t *testing.T) {
text := " [URGENT] Les forces de dissuasion #nucleaire de la #Russie"
var re = regexp.MustCompile(`#([_A-Za-z0-9]+)`)
pos := re.FindAllStringIndex(text, -1)
// FindAllStringIndex returns
// [0][43,53]
// [1][60,67]
// These are the expected positions.
require.Equal(t, pos[0][0], 37)
require.Equal(t, pos[0][1], 47)
require.Equal(t, pos[1][0], 54)
require.Equal(t, pos[1][1], 61)
}
FindAllStringIndex()
函数 returns 字节的位置,而不是符文。
您需要 import "unicode/utf8"
并使用 utf8.RuneCountInString(text[:pos[0][0]])
等而不是 pos[0][0]
以确保您计算的是 Unicode 代码点而不仅仅是字节数:
// 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)
}
参见Go demo。
此外,#\w+
是一个较短的模式,用于匹配 #
和一个或多个字母、数字或下划线。