作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试从字符串中删除所有多余的破折号。
StateFileRegexDashes = regexp.MustCompile(
--+?|^-+?|-+$)
上面的正则表达式似乎适用于 regex101,但不适用于我的代码。我在想这可能是因为 'g|global modifier',但我认为这是由 ReplaceAllString()
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/
我是一名优秀的程序员,十分优秀!