2016-12-14 65 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

啊,我明白你的意思了。用破折號替換雙破折號,不用任何東西代替破折號!關於貪婪修飾符也很好! –