我有这样的代码
re, err = regexp.Compile(`\p{Han}*`)
if err != nil {
fmt.Println(err)
return
}
s := "foo中文哦woqu"
fmt.Println(re.FindString(s))
但它打印为空。
然后我将\p{Han}*
更改为\p{Han}+
,它会显示中文哦。
将\p{Han}*
更改为\p{Han}?
,它会打印为空。
我发现这样的文件:
所以我希望我的印刷品是:
\p{Han}*
print中文哦\p{Han}+
print中文哦\p{Han}?
print中有人可以告诉我发生了什么吗?
答案 0 :(得分:3)
正如docs所说(强调补充):
FindString返回一个字符串,其中包含正则表达式的s中最左侧匹配的文本。如果没有匹配,则返回值为空字符串,但如果正则表达式成功匹配空字符串,则返回值也为空。如果需要区分这些情况,请使用FindStringIndex或FindStringSubmatch。
\p{Han}*
匹配空字符串。您还可以使用FindAllString
:
fmt.Printf("%q", re.FindAllString(s, -1))
// Prints ["" "" "" "中文哦" "" "" "" ""]
您可以使用与空字符串不匹配的\p{Han}+
。