Вы можете использовать регулярное выражение типа \([^()]*\)
для сопоставления строк внутри самых внутренних скобок и использовать ReplaceAllStringFunc
только для замены всех AND
на OR
внутри сопоставленных текстов:
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")
}))
}
См. Демонстрационную версию Go
Обратите внимание, что вы можете заменить AND
с помощью второго регулярного выражения:
return regexp.MustCompile(`\bAND\b`).ReplaceAllString(m, "OR")
, который заменит AND
, которые являются целымислова независимо от того, есть место или нет.См. эту демонстрацию Go .