2017-05-16 237 views
-3

我需要刪除除「|」之外的所有字符和一個字符串中的空格。我不明白在Go中如何做到這一點。請幫忙。Golang:刪除除|以外的所有字符from string

的字符串看起來是這樣的:

|| ||| |||| || ||||| ||| || |||| hello | 

,我需要它返回此:

|| ||| |||| || ||||| ||| || |||| | 

提前感謝!

+5

你嘗試過什麼?你能分享一些代碼嗎? – RickyA

回答

5

使用regex.ReplaceAllString:

ReplaceAllStringFunc返回其正則表達式的所有比賽已被取代應用於匹配的子功能REPL的返回值SRC的副本。 repl所返回的替代直接取代的,而無需使用展開。

例子:

reg := regexp.MustCompile("[^| ]+") 
origStr := "|| ||| |||| || ||||| ||| || |||| hello |" 
replaceStr := reg.ReplaceAllString(origStr, "") 

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

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

4

「我想這是誘人的,如果你唯一的工具是一把錘子,到 對待每一件事,好像它是一個釘子「。 Abrahanm馬斯洛, 科學的心理學,從其他語言1966年

程序員有時候想正則表達式作爲一個錘子和對待所有文字釘子。

在圍棋,保持它的簡單和有效的,例如,

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 

地圖返回字符串s與它的所有字符的副本根據所述映射函數修改 。如果映射返回否定 值,字符從沒有替換字符串下降。

相關問題