2016-12-14 68 views
2

我试图从字符串中删除所有过多的破折号。用OR正则表达式去除过多的破折号

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

上述正则表达式似乎为我工作的regex101,但不在我的代码。 我想这可能是因为的“G |全球改性剂”,但我认为是由“所有”部分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)) 
} 

回答

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连字符,则需要将懒惰量词变成贪婪那些。

+0

啊,我明白你的意思了。用破折号替换双破折号,不用任何东西代替破折号!关于贪婪修饰符也很好! –