首页 > 解决方案 > 如何在字符之间查找和替换

问题描述

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

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

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

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

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

标签: regexgo

解决方案


您可以使用正则表达式\([^()]*\)来匹配最内层括号内的字符串,并仅使用匹配文本内的所有内容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")
        }))
}

查看Go 演示

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

return regexp.MustCompile(`\bAND\b`).ReplaceAllString(m, "OR")

AND无论是否有空格,它将替换整个单词。请参阅此 Go 演示


推荐阅读