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

时间:2016-12-14 09:08:37

标签: regex go

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

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

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

中的'All'部分解决的

Golang游乐场:https://play.golang.org/p/ZR72gZEhZ_
Regex101: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))
}

1 个答案:

答案 0 :(得分:3)

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

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个连字符,您需要将延迟量词转换为 greedy