猿问

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

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

Place *: *(.*)

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

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

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

但它似乎不适用于\u00A0空白。这是 regexp 模块的错误还是想要的行为?如果是后者,我如何匹配所有类型的空格而不将它们全部列出?


慕森卡
浏览 166回答 1
1回答

largeQ

该RE2语法不限制\s到(≡ [\t\n\f\r ]),这似乎非常标准。这可能是在使用正则表达式之前对字符串进行预处理更容易的情况。例如,strings.Fields()将围绕空格拆分字符串,包括 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)}这将处理不可破坏的空间,因为unicode.IsSpace() 报告符文是否是由 Unicode 的 White Space 属性定义的空格字符;在 Latin-1 空间中,这是:'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP).
随时随地看视频慕课网APP

相关分类

Go
我要回答