我正在尝试从字符串中删除所有过多的破折号。
StateFileRegexDashes = regexp.MustCompile(
- + | ^ - + |?? - + $ )
上面的正则表达式似乎对regex101有用,但不在我的代码中。
我以为它可能是因为'g | global modifier',但我认为这是由ReplaceAllString()
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))
}
答案 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 。