输入字符串: “///hello//stackover.flow”如何在一个字符串中将多个斜线(///)替换为Go lang中的一个斜线(/)?
预期输出: “/hello/stackover.flow”
输入字符串: “///hello//stackover.flow”如何在一个字符串中将多个斜线(///)替换为Go lang中的一个斜线(/)?
预期输出: “/hello/stackover.flow”
只是一种选择。如果您需要替换其他多个字符,则可以使用它。
re, _ := regexp.Compile("/+")
fmt.Println(re.ReplaceAllLiteralString("///hello//stackover.flow", "/"))
您可以使用path.Clean
了点。
func Clean(path string) string
清洁返回相当于最短路径名路径由单纯的词汇处理。它反复应用以下规则,直到不能进一步处理:
- 用单斜杠替换多个斜线。
- 消除每个。路径名称元素(当前目录)。
- 消除每个内部..路径名称元素(父目录) 以及它之前的非..元素。
- 消除..开始根路径的元素: 即在路径开头用“/”替换“/ ..”。 返回的路径只有以“/”为根时才以斜杠结尾。
如果此过程的结果是空字符串,则Clean将返回字符串“。”。
这里是一个简单的基准,这与正则表达式的解决方案进行比较:
package main
import (
"path"
"regexp"
"testing"
)
var p = "///hello//stackover.flow"
func BenchmarkPathRegexp(b *testing.B) {
re := regexp.MustCompile("/+")
for i := 0; i < b.N; i++ {
re.ReplaceAllLiteralString(p, "/")
}
}
func BenchmarkPathClean(b *testing.B) {
for i := 0; i < b.N; i++ {
path.Clean(p)
}
}
结果:
BenchmarkPathRegexp-4 2000000 794 ns/op
BenchmarkPathClean-4 10000000 145 ns/op
这应该是一个被接受的答案。 – Matt