我正在 golang 中编写一个正则表达式来捕获可能以不同语言出现的主题标签。例如,很明显一个是英语,但可能会有拉丁语或阿拉伯语用户尝试使用这些字符集创建主题标签。我知道 unicode 字符类名称,但是如何在不为每个字符生成正则表达式的情况下一次使用多个?示例代码:r, err := regexp.Compile(`\B(\#[[:ascii:]]+\b)[^?!;]*`)这将匹配"#hello #ذوق"并输出[]string{#hello, #ذوق}但不匹配"#ذوق"
1 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
我建议使用
\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 main
import (
"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 := "#ذوق"
,输出为 #ذوق
。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消