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

时间:2019-03-20 10:16:59

标签: regex go

我正在尝试将以下字符串中的第二个“ 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)

1 个答案:

答案 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

相关问题