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

标签 regex go

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

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

上面的正则表达式似乎适用于 regex101,但不适用于我的代码。 我认为这可能是因为 'g|global 修饰符',但我认为这是通过 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/

相关文章:

python - 路由中的 webapp2 python 正则表达式

javascript - 在javascript中解析包含许多空格的字符串

r - 在 pivot_longer 的 names_pattern 参数中为通过前缀的存在或不存在区分的多个变量编码正则表达式

go - 调用 eq : invalid type for comparison in Go template 时出错

Golang 包不在 GOROOT (/usr/local/go/src/packageName)

javascript - 在预提交javascript中清除 "bad"字符的表单提交数据?

PHP 正则表达式任何字符

sorting - 有没有办法避免对结构 slice 执行完整的 sort.Interface?

go - 如何让 logrus 打印 pkg/errors 堆栈

templates - 文本模板不适用于某些单词