2017-06-06 344 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

非常感谢!这正是我所期待的。 –

相关问题