如何在字符之间查找和替换

LaS*_*Sul 2 regex go

我正在尝试在以下字符串中将第二个“ AND”替换为“ OR”:

country == "BR" AND (leftHour >= 6 AND rightHour < 24)

我的策略是使用regex做到这一点:\((.*)\) 但这匹配方括号之间的所有字符,我只想匹配AND两个方括号之间的字符。

在Go中是完美的,但是好的正则表达式就足够了。

编辑:字符串不是固定的,例如,我们可以有多个“ AND”,例如: currency == "USD" AND country == "BR" AND (leftHour >= 6 AND rightHour < 24)

Wik*_*żew 5

您可以使用正则表达式像\([^()]*\)匹配最里面的括号里面使用的字符串ReplaceAllStringFunc,只替换所有ANDOR匹配的文本里面:

package main

import (
        "fmt"
        "strings"
        "regexp"
)

func main() {
        input := `country == "BR" AND (leftHour >= 6 AND rightHour < 24)`
        r := regexp.MustCompile(`\([^()]*\)`)
        fmt.Println(r.ReplaceAllStringFunc(input, func(m string) string {
                return strings.ReplaceAll(m, "AND", "OR")
        }))
}
Run Code Online (Sandbox Code Playgroud)

观看Go示范

请注意,您可以AND使用第二个正则表达式替换:

return regexp.MustCompile(`\bAND\b`).ReplaceAllString(m, "OR")
Run Code Online (Sandbox Code Playgroud)

AND不管是否有空格,都将替换整个单词。请参阅此Go演示