在 Go 中,我如何声明我要匹配所有类型的 space,包括不间断的?

In Go, how can I state I want to match all kinds of space, including the non-breaking one?

我必须匹配如下所示的给定模式:

Place *: *(.*)

换句话说,我有一个标签,一些空格,一个冒号,一些空格,以及我想要的值。

但是,我的数据中有些地方的空格不是通常的 20 ASCII 字符,而是不间断空格(unicode 字符 \u00A0)。我怎样才能匹配它们?我想到了使用

Place\s*:\s*(.*)

但它似乎不适用于 \u00A0 空格。这是 regexp 模块的错误还是这是想要的行为?如果是后者,我怎么能匹配各种空格而不一一列出呢?

re2 syntax 确实将 \s 限制为 (≡ [\t\n\f\r ]),这似乎很标准。

在使用正则表达式之前预处理字符串可能更容易。
例如 strings.Fields() would split the string around spaces, including unicode space runes.

// Fields splits the string s around each instance of one or more consecutive white space
// characters, as defined by unicode.IsSpace, returning an array of substrings of s or an
// empty list if s contains only white space.
func Fields(s string) []string {
    return FieldsFunc(s, unicode.IsSpace)
}

这将处理不可破坏的 space,因为 unicode.IsSpace() 报告符文是否是 Unicode 的白色定义的 space 字符 Space 属性;在 Latin-1 space 中是:

'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP).