gpt4 book ai didi

regex - 使用 OR 正则表达式删除过多的破折号

转载 作者:IT王子 更新时间:2023-10-29 01:38:53 25 4
gpt4 key购买 nike

我正在尝试从字符串中删除所有多余的破折号。

StateFileRegexDashes = regexp.MustCompile(--+?|^-+?|-+$)

上面的正则表达式似乎适用于 regex101,但不适用于我的代码。我在想这可能是因为 'g|global modifier',但我认为这是由 ReplaceAllString()

中的 'All' 部分解决的

Golang Playground :https://play.golang.org/p/ZR72gZEhZ_
正则表达式 101:https://regex101.com/r/tUYHo1/1

编辑:
问题是我用 - 破折号替换了所有内容,我实际上想删除前缀和结尾的破折号。

我现在没有使用另一个正则表达式,而是使用 strings.Trim()

var (
StateFileRegex = regexp.MustCompile(`[\/\?<>\\:\*\|":!\s.]`)
StateFileRegexDashes = regexp.MustCompile(`--+`)
)

func hashBotStateFile(name string) string {
lower := strings.ToLower(name)
dashes := StateFileRegex.ReplaceAllString(lower, StateFileCharReplacer)
singles := StateFileRegexDashes.ReplaceAllString(dashes, StateFileCharReplacer)
trimmed := strings.Trim(singles, "-")
return filepath.Join(StateFileFolder, fmt.Sprintf("%s.json", trimmed))
}

最佳答案

您需要删除前导/尾随 - 符号,并缩小字符串内的符号。您需要将破折号正则表达式拆分为

StateFileRegexDashes = regexp.MustCompile(`--+`)
StateFileRegexDashesRemove = regexp.MustCompile(`^-+|-+$`)

然后使用类似的东西

func hashBotStateFile(name string) string {
lower := strings.ToLower(name)
dashes := StateFileRegex.ReplaceAllString(lower, StateFileCharReplacer)
trimmed := StateFileRegexDashes.ReplaceAllString(dashes, StateFileCharReplacer)
final := StateFileRegexDashesRemove.ReplaceAllString(trimmed, "")
return filepath.Join(StateFileFolder, fmt.Sprintf("%s.json", final))
}

参见 Go demo

另请注意,模式末尾的 --+? 始终只匹配 2 个连字符,您需要将惰性量词转换为贪婪量词。

关于regex - 使用 OR 正则表达式删除过多的破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com