Golang:删除除|以外的所有字符来自字符串

时间:2017-05-16 18:00:59

标签: regex string go replace

我需要删除除" |"之外的所有字符。和字符串中的空格。我不明白在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";

提前致谢!

2 个答案:

答案 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
  

Package strings

     

func Map

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, "")

文档: https://golang.org/pkg/regexp/#Regexp.ReplaceAllString

GoPlay: https://play.golang.org/p/rfZFuQMrNJ