2016-12-14 4 views
2

Ich versuche, alle übermäßigen Striche aus Strings zu entfernen.Entfernen von übermäßigen Bindestrichen mit OR Regex

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

Die obige Regex scheint für mich auf regex101 zu arbeiten, aber nicht in meinem Code. Ich dachte, es ist wegen der sein könnte ‚g | global Modifikator‘, aber ich nehme an, dass durch die ‚alle‘ an ReplaceAllString()

Golang Spielplatz gelöst: https://play.golang.org/p/ZR72gZEhZ_
Regex101: https://regex101.com/r/tUYHo1/1

bearbeiten:
Problem war ich wurde alles mit - Bindestriche ersetzen, wo ich eigentlich Präfixe und nachfolgende Bindestriche entfernen wollte.

Anstatt eine andere Regex zu tun, verwende ich jetzt nur 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)) 
} 

Antwort

3

Sie müssen die Vorder-/Hinter - Symbole entfernen, und diejenigen in der Zeichenfolge schrumpfen. Sie müssen die Striche regex in

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

Und dann so etwas wie

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)) 
} 

Siehe Go demo

Beachten Sie auch verwenden, um geteilt, dass --+? am Ende des Musters immer nur 2 übereinstimmen Bindestriche, müssen Sie die Lazy Quantoren in gierige Einsen drehen.

+0

Ahh, ich verstehe was du meinst. Ersetzen Sie doppelte Bindestriche durch Bindestrich, ersetzen Sie Bindestriche durch nichts! Auch ein guter Punkt über den gierigen Modifikator! –

Verwandte Themen