我想知道如何删除:

  • 全部leading/trailing个空格或换行符、空字符等.
  • 字符串中的任何冗余空格(例如"hello[space][space]world"将转换为"hello[space]world")

对于单个正则表达式、对国际空格字符的Unicode支持等,这是可能的吗?

推荐答案

似乎您可能希望同时使用\s速记字符类和\p{Zs} Unicode属性来匹配Unicode空格.但是,这两个步骤都不能用1个正则表达式替换来完成,因为您需要两个不同的替换,并且ReplaceAllStringFunc只允许将整个匹配字符串作为参数(我不知道如何判断哪个组匹配).

因此,我建议使用两个regexp:

  • ^[\s\p{Zs}]+|[\s\p{Zs}]+$-匹配所有前导/尾随空格
  • [\s\p{Zs}]{2,}-匹配字符串内的2个或更多空格符号

示例代码:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    input := "   Text   More here     "
    re_leadclose_whtsp := regexp.MustCompile(`^[\s\p{Zs}]+|[\s\p{Zs}]+$`)
    re_inside_whtsp := regexp.MustCompile(`[\s\p{Zs}]{2,}`)
    final := re_leadclose_whtsp.ReplaceAllString(input, "")
    final = re_inside_whtsp.ReplaceAllString(final, " ")
    fmt.Println(final)
}

Go相关问答推荐

T的Golang通用切片,其中 *T实现接口

使用恶意软件 scanner (ClamAV)时的Google云存储桶上传文件验证

golang父进程的副本无法进行https/tls调用并获得tls:未能验证证书""

Golang html/模板&需要错误数量的参数1在模板中使用';调用';获得0&q;

链自定义GRPC客户端拦截器/DialOptions

如何在GoFr中为生产和本地环境设置不同的配置?

租户GUID X的租户不存在self 邮箱帐户的租户(我是唯一的成员)

如何在VSCode中为特定的.go文件创建调试配置?

从 ApiGateway 中的 lambda Go 返回 Json

同一文件上的多个 Arrow CSV 阅读器返回 null

将 struct 转换为 CSV 字符串

设置 graphql 的最大文件上传大小(golang)

Go 的垃圾收集器在使用时删除 ZeroMQ 套接字

如何在 golang 中同时加载 .env 文件和 os 环境变量

为什么 x/net/html Token().Attr 上的 len 在此处为空切片返回非零值?

如何在测试中传递用户名和密码等参数

golangci-lint 的 GitHub 操作失败,无法加载 fmt

Go 1.18 泛型如何使用接口定义新的类型参数

如何在程序退出时使用 golang 删除文件?

全局记录(across packages)