正则表达式替换除#和@之外的所有符号

时间:2017-06-06 01:25:55

标签: regex go text replace

我对使用regexp并不十分自信,但我的最终目标是删除除@#之外的所有符号。

我现在拥有的是 [\\p{P}\\d] 。 它工作正常但它也删除了我需要保留的@#

以下是示例输入字符串:

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

我想改成

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

1 个答案:

答案 0 :(得分: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] - 标点符号,符号或数字字符。