2017-05-16 21 views
-3

私は "|"以外のすべての文字を削除する必要があります文字列からの空白文字。私はGoでこれを行う方法を理解していません。助けてください。Golang:|を除くすべての文字を削除します。文字列から

文字列は次のようになります。

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

と私はそれがこの返却する必要があります。事前に

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

感謝を!

+5

何を試しましたか?いくつかのコードを共有できますか? – RickyA

答えて

5

使用regex.ReplaceAllString:

ReplaceAllStringFuncは、正規表現のすべてのマッチはマッチした部分文字列に適用される機能のREPLの戻り値によって置き換えられている、srcのコピーを返します。 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

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のコピーを返します。マッピングで負の値の が返された場合、その文字は置換されずに文字列から削除されます。

関連する問題