我正在尝试将以下字符串中的第二个“ AND”替换为“ OR”:
country == "BR" AND (leftHour >= 6 AND rightHour < 24)
我的策略是使用正则表达式:\((.*)\)
但这匹配括号之间的所有字符,我只想匹配两个括号之间的AND
。
在Go中是完美的,但是好的正则表达式就足够了。
Edit:字符串不是固定的,例如,我们可以有多个“ AND”,例如:
currency == "USD" AND country == "BR" AND (leftHour >= 6 AND rightHour < 24)
答案 0 :(得分:5)
您可以使用诸如\([^()]*\)
之类的正则表达式来匹配最里面括号内的字符串,并使用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 demo
请注意,您可以使用第二个正则表达式替换AND
:
return regexp.MustCompile(`\bAND\b`).ReplaceAllString(m, "OR")
将替换整个单词的AND
,而不管是否有空格。参见this Go demo。