我正在 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 #??? #citroe?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 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消