在Go中,我怎么说我想要匹配所有类型的空间,包括不破坏的空间?

Fab*_*ien 1 regex unicode whitespace go

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

Place *: *(.*)
Run Code Online (Sandbox Code Playgroud)

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

但是,我的数据中有一些空格不是通常的20ASCII字符,而是非空格(unicode字符\u00A0).我怎么能匹配它们?我想过要用

Place\s*:\s*(.*)
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于\u00A0空白.这是regexp模块的错误还是这个想要的行为?如果是后者,如何在不列出所有空格的情况下匹配所有类型的空间?

Von*_*onC 5

RE2语法不限制\s(? [\t\n\f\r ]),这似乎非常标准.

这可能是使用正则表达式之前预处理字符串更容易的情况.
例如,strings.Fields()将字符串分割为空格,包括unicode空间符文.

// 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)
}
Run Code Online (Sandbox Code Playgroud)

这会照顾不可破坏的空间,因为unicode.IsSpace() 报告符文是否是由Unicode的White Space属性定义的空格字符; 在Latin-1空间中,这是:

'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP).
Run Code Online (Sandbox Code Playgroud)