我正在尝试在以下字符串中将第二个“ 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)
您可以使用正则表达式像\([^()]*\)匹配最里面的括号里面使用的字符串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")
}))
}
Run Code Online (Sandbox Code Playgroud)
观看Go示范
请注意,您可以AND使用第二个正则表达式替换:
return regexp.MustCompile(`\bAND\b`).ReplaceAllString(m, "OR")
Run Code Online (Sandbox Code Playgroud)
AND不管是否有空格,都将替换整个单词。请参阅此Go演示。