我需要删除除" |"之外的所有字符。和字符串中的空格。我不明白在Go中如何做到这一点。请帮忙。
字符串可能如下所示:
.header-fixedWidth
{
height: inherit;
width: 853px;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
@include breakPoint(916px)
{
width: 90vw;
}
}
我需要它来回复:
@import "Mods/_base";
@import "Mods/_headerAndNav";
@import "Mods/_mainContent";
@import "Mods/_mixins";
提前致谢!
答案 0 :(得分:8)
"我认为这是诱人的,如果你拥有的唯一工具是锤子,那么 把一切当作指甲一样对待。"亚伯拉罕马斯洛,心理学 科学,1966年。
来自其他语言的程序员有时会将正则表达式视为锤子,并将所有文本视为钉子。
在Go中,保持简单高效,例如,
package main
import (
"fmt"
"strings"
"unicode"
)
func remove(s string) string {
return strings.Map(
func(r rune) rune {
if r == '|' || unicode.IsSpace(r) {
return r
}
return -1
},
s,
)
}
func main() {
s := "|| ||| |||| || ||||| ||| || |||| hello |"
fmt.Println(s)
s = remove(s)
fmt.Println(s)
}
输出:
|| ||| |||| || ||||| ||| || |||| hello |
|| ||| |||| || ||||| ||| || |||| |
一个简单的基准:
package main
import (
"regexp"
"testing"
)
var (
s = "|| ||| |||| || ||||| ||| || |||| hello |"
t string
)
func BenchmarkMap(b *testing.B) {
for i := 0; i < b.N; i++ {
t = remove(s)
}
}
func BenchmarkRegexp(b *testing.B) {
reg := regexp.MustCompile("[^| ]+")
for i := 0; i < b.N; i++ {
t = reg.ReplaceAllString(s, "")
}
}
输出:
BenchmarkMap 5000000 337 ns/op
BenchmarkRegexp 1000000 2068 ns/op
func Map(mapping func(rune) rune, s string) string
Map返回字符串s的副本,并修改其所有字符 根据映射功能。如果映射返回负数 值,字符从字符串中删除而没有替换。
答案 1 :(得分:7)
使用regex.ReplaceAllString:
ReplaceAllStringFunc返回src的副本,其中Regexp的所有匹配项已被应用于匹配子字符串的函数repl的返回值替换。 repl返回的替换直接替换,不使用Expand。
示例:
reg := regexp.MustCompile("[^| ]+")
origStr := "|| ||| |||| || ||||| ||| || |||| hello |"
replaceStr := reg.ReplaceAllString(origStr, "")