regexp find for Chinese unicode character

huangapple go评论108阅读模式
英文:

regexp find for Chinese unicode character

问题

你好!根据你提供的代码和问题,我可以为你解释一下发生的情况。

首先,你使用了正则表达式来匹配字符串中的汉字。在正则表达式中,\p{Han} 表示匹配一个汉字字符。然后,你使用了不同的量词来限定匹配的次数。

  • \p{Han}* 表示匹配零个或多个汉字字符。这意味着它会匹配空字符串,因为它可以选择不匹配任何汉字字符。所以当你使用这个正则表达式时,它会打印空字符串。

  • \p{Han}+ 表示匹配一个或多个汉字字符。这意味着它至少会匹配一个汉字字符。所以当你使用这个正则表达式时,它会打印 "中文哦",因为这是字符串中的一个汉字字符序列。

  • \p{Han}? 表示匹配零个或一个汉字字符。这意味着它可以选择匹配一个汉字字符,也可以选择不匹配任何汉字字符。所以当你使用这个正则表达式时,它会打印空字符串。

根据你的预期,你希望打印的结果是:

  • 使用 \p{Han}*:打印 "中文哦"
  • 使用 \p{Han}+:打印 "中文哦"
  • 使用 \p{Han}?:打印 "中"

然而,实际上的结果与你的预期不符。可能的原因是你的正则表达式引擎对 Unicode 属性的支持不完整,导致无法正确匹配汉字字符。

希望这个解释对你有帮助!如果你还有其他问题,请随时提问。

英文:

i have code like this

re, err = regexp.Compile(`\p{Han}*`)
if err != nil {
    fmt.Println(err)
    return
}
s := "foo中文哦woqu"
fmt.Println(re.FindString(s))

but it print empty.

and then i change \p{Han}* to \p{Han}+, it display's 中文哦.

change \p{Han}* to \p{Han}?, it print empty.

I find the document like this:

  • x* zero or more x, prefer more
  • x+ one or more x, prefer more
  • x? zero or one x, prefer one

so i expect my print is:

  • \p{Han}* print 中文哦
  • \p{Han}+ print 中文哦
  • \p{Han}? print 中

could someone tell me what happened?

答案1

得分: 4

根据文档(已加重说明):

>FindString返回一个字符串,其中包含正则表达式在s中最左边匹配的文本。如果没有匹配,返回值是一个空字符串,但是如果正则表达式成功匹配了一个空字符串,返回值也将为空。如果需要区分这些情况,可以使用FindStringIndex或FindStringSubmatch。

\p{Han}*匹配一个空字符串。你也可以通过使用FindAllString来验证:

fmt.Printf("%q", re.FindAllString(s, -1))
// 输出 ["", "", "", "中文哦", "", "", "", ""]

你可以使用\p{Han}+来匹配不包含空字符串的情况。

英文:

As the docs say (emphasis added):

>FindString returns a string holding the text of the leftmost match in s of the regular expression. If there is no match, the return value is an empty string, but it will also be empty if the regular expression successfully matches an empty string. Use FindStringIndex or FindStringSubmatch if it is necessary to distinguish these cases.

\p{Han}* matches an empty string. You can also see that by using FindAllString:

fmt.Printf("%q", re.FindAllString(s, -1))
// Prints ["" "" "" "中文哦" "" "" "" ""]

You can use \p{Han}+ which doesn't match an empty string.

huangapple
  • 本文由 发表于 2016年12月6日 17:35:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/40992042.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定