2017-06-06 347 views
2

我對使用正則表達式不是很有信心,但我的最終目標是讓東西移除除@#之外的所有符號。正則表達式替換除#以外的所有符號和@

我現在擁有的是[\\p{P}\\d]。 它工作正常,但它也刪除我需要保留的@#

這裏是樣本輸入字符串:

^Hello, my #friend @Даниил%% 中英 字 典!!. 

,我試圖改變成

Hello my #friend @Даниил 中英 字 典 

回答

2

捕捉你需要保持與$1反向引用代替的符號,以恢復在截取部分得到的字符串:

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    s := "^Hello, my #friend @Даниил%% 中英 字 典!!." 
    re := regexp.MustCompile(`([#@])|[\p{P}\p{S}\d]`) 
    s = re.ReplaceAllString(s, "$1") 
    fmt.Println(s) 
} 

請參閱this Go demo印刷Hello my #friend @Даниил 中英 字 典

請注意,^不屬於\p{P}類別,因此,我添加了\p{S}之一。

該模式是([#@])|[\p{P}\p{S}\d],參見its online demo

詳細

  • ([#@]) - 捕捉匹配一個#@
  • |組1(稱爲從替換模式$1/${1}) - 或
  • [\p{P}\p{S}\d] - 一個標點符號,符號或數字字符。
+1

非常感謝!這正是我所期待的。 –

相關問題