猿问

如何匹配多种语言

我正在 golang 中编写一个正则表达式来捕获可能以不同语言出现的主题标签。例如,很明显一个是英语,但可能会有拉丁语或阿拉伯语用户尝试使用这些字符集创建主题标签。我知道 unicode 字符类名称,但是如何在不为每个字符生成正则表达式的情况下一次使用多个?

示例代码:

r, err := regexp.Compile(`\B(\#[[:ascii:]]+\b)[^?!;]*`)

这将匹配"#hello #ذوق"并输出[]string{#hello, #ذوق}但不匹配"#ذوق"


当年话下
浏览 93回答 1
1回答

慕哥9229398

我建议使用\B#[\p{L}\p{N}\p{M}_]+其中[\p{L}\p{N}\p{M}_]大致是 Unicode 感知\w模式。匹配\p{L}任何 Unicide 字母,\p{M}匹配任何组合标记并\p{N}匹配任何 Unicode 数字。请参阅Go 演示:package mainimport (    "fmt"    "regexp")func main() {    text := "#hello #ذوق #citroën"    r := regexp.MustCompile(`\B#[\p{L}\p{N}\p{M}_]+`)    res := r.FindAllString(text, -1)    for _, element := range res {        fmt.Println(element)    }}输出:#hello#ذوق使用text := "#ذوق",输出为 #ذوق。
随时随地看视频慕课网APP

相关分类

Go
我要回答