为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森卡 2021-09-13 19:51:02
我必须匹配如下所示的给定模式:Place *: *(.*)换句话说,我有一个标签、一些空格、一个冒号、一些空格和我想要的值。但是,我的数据中有一些地方的空格不是通常的20ASCII 字符,而是不间断的空格(unicode 字符\u00A0)。我怎样才能匹配它们?我想用Place\s*:\s*(.*)但它似乎不适用于\u00A0空白。这是 regexp 模块的错误还是想要的行为?如果是后者,我如何匹配所有类型的空格而不将它们全部列出?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

该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).


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信