我有一个用例,其中我可以拥有一个可以包含任何内容的文本字符串。我想要实现的是替换给定字符串中的某个模式。
假设我给出的字符串是
:es1
es2
aaes1aa
:es3,
es1:
ees1,
ees1
{
"es1 :我在这里尝试做的是假设我必须用一个条件替换这个字符串中的所有es1。它必须是end或以[, | ; | : | " | ' | \\ | \s]开头。可以接受:es1、es1,、es1:等,但不能接受eees1sss。
我尝试了([, | ; | : | " | ' | \\ | \s])(es1)([, | ; | : | " | ' | , | \s])类似的东西,但我不认为它是我需要的。
Go程序:
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 :发布于 2021-09-02 08:51:29
下面提供的解决方案没有针对所有可能性进行很好的测试,但它似乎是有效的。
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}"))
}发布于 2021-09-02 09:30:02
您可以使用
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 demo和regex demo。请注意,方括号中的空格和|字符很有意义,并且从字面上匹配这些字符,因此,您需要将它们从您的模式中全部删除。
正则表达式匹配:
([,;:"'\\\s])es1\b -组1:逗号或分号、冒号、双引号或单引号、反斜杠或空格;然后是作为一个完整单词的es1 (组2:逗号或分号、冒号、双引号或单引号、反斜杠或空格是一个单词boundary)
| -\b-a whole word https://stackoverflow.com/questions/69026377
复制相似问题