regex - 如何在字符之间查找和替换
问题描述
我正在尝试将以下字符串中的第二个“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)
解决方案
您可以使用正则表达式\([^()]*\)
来匹配最内层括号内的字符串,并仅使用匹配文本内的所有内容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 演示。
推荐阅读
- amazon-web-services - 在 aws 上创建 codebuild 项目
- git - PhpStorm:无法再使用推送窗口推送(登录到 GitHub)
- html - Page refresh on check/uncheck of checkbox in thymeleaf spring boot
- opencv - With imagemagick (or OpenCV) how do I extract the hue channel to B&W
- typescript - 防止被0除的打字稿类型
- java - Map generation by Cellular Automata not working
- c# - 如何从注册表中读取 REG_DWORD 类型的大值?
- haskell - Haskell:如何将输入值从函数添加到全局列表?
- visual-studio-code - 重新禁用大文件的扩展
- file - Convert .rttm files to .eaf/ELAN format