【问题标题】:How to replace multiple sub occurrences of string如何替换字符串的多个子出现
【发布时间】:2021-10-31 16:48:51
【问题描述】:

我有一个用例,我可以有一个可以包含任何内容的文本字符串。我想要实现的是替换给定字符串中的某个模式。

假设我给了字符串

:es1
es2
aaes1aa
:es3,
es1:
ees1,
ees1 

{
"es1 :

我在这里尝试做的是假设我必须替换此字符串中的所有 es1 但有一个条件。它必须以[, | ; | : | " | ' | \\ | \s] 结尾或开头。接受:es1es1,es1: 等,但不接受eees1sss

我试过 ([, | ; | : | " | ' | \\ | \s])(es1)([, | ; | : | " | ' | , | \s]) 这样的东西,但我不认为这是我需要的。

围棋程序:

match := regexp.MustCompile(`([, | ; | : | " | ' | \\ | \s])(es1)([, | ; | : | " | ' | , | \s])`)
    test := `:es1
    es2
    aaes1aa
    :es3,
    es1:
    ees1,
    ees1 
    
    {
    "es1 :`
    
    fmt.Println(match.ReplaceAllString(test, "$1es4$3"))

输出:

       es2
        aaes1aa
        :es3,
:
        ees1,
        ees1 

        {
         :

我希望我的输出更像

:es4
    es2
    aaes1aa
    :es3,
    es4:
    ees1,
    ees1 

    {
    "es4 :

【问题讨论】:

  • e:es1 呢?
  • 应该匹配。因为es1后面有分隔符。但前提是 e:es1 也以分隔符之一结尾或者是字符串中的最后一个字符
  • 第一个单词和最后一个单词也是允许的。 es1: 或文本中的 :es1 es1: .....some text. ..:es1

标签: regex go


【解决方案1】:

下面提供的解决方案并未针对所有可能性进行过很好的测试,但它似乎有效。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    match := regexp.MustCompile(`([, | ; | : | " | ' | \\ | \s])es1|^es1([, | ; | : | " | ' | , | \s])`)
    test := `:es1
    es2
    aaes1aa
    :es3,
    es1:
    ees1,
    ees1 
    
    {
    "es1 :`

    fmt.Println(match.ReplaceAllString(test, "${1}es4${2}"))
}

https://play.golang.org/p/E8lb9vmM_Sa

【讨论】:

    【解决方案2】:

    你可以使用

    package main
    
    import (
        "fmt"
        "regexp"
    )
    
    func main() {
        match := regexp.MustCompile(`([,;:"'\\\s])es1\b|\bes1([,;:"'\\\s])`)
        test := ":es1\n    es2\n    aaes1aa\n    :es3,\n    es1:\n    ees1,\n    ees1 \n    \n    {\n    \"es1 :"
        fmt.Println(match.ReplaceAllString(test, "${1}es4$2"))
    }
    

    请参阅 Go demoregex demo。请注意,方括号内的空格和| 字符是有意义的,并且会按字面意思匹配这些字符,因此,您需要将它们全部从模式中删除。

    正则表达式匹配:

    • ([,;:"'\\\s])es1\b - 第 1 组:逗号或分号、冒号、双引号或单引号、反斜杠或空格;然后将es1 作为一个完整的单词(\b 是一个单词边界)
    • | - 或
    • \bes1 - 一个完整的词es1
    • ([,;:"'\\\s]) - 第 2 组:逗号或分号、冒号、双引号或单引号、反斜杠或空格

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2016-12-03
      • 1970-01-01
      相关资源
      最近更新 更多