首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换字符串的多个子匹配项

如何替换字符串的多个子匹配项
EN

Stack Overflow用户
提问于 2021-09-02 08:03:47
回答 2查看 60关注 0票数 0

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

假设我给出的字符串是

代码语言:javascript
复制
:es1
es2
aaes1aa
:es3,
es1:
ees1,
ees1 

{
"es1 :

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

我尝试了([, | ; | : | " | ' | \\ | \s])(es1)([, | ; | : | " | ' | , | \s])类似的东西,但我不认为它是我需要的。

Go程序:

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

输出:

代码语言:javascript
复制
       es2
        aaes1aa
        :es3,
:
        ees1,
        ees1 

        {
         :

我希望我的输出更像

代码语言:javascript
复制
:es4
    es2
    aaes1aa
    :es3,
    es4:
    ees1,
    ees1 

    {
    "es4 :
EN

回答 2

Stack Overflow用户

发布于 2021-09-02 08:51:29

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-09-02 09:30:02

您可以使用

代码语言:javascript
复制
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 (组2:逗号或分号、冒号、双引号或单引号、反斜杠或空格

是一个单词boundary)

  • | -\b-a whole word
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69026377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档