2016-12-14 2 views
2

J'essaie de supprimer tous les tirets excessifs des chaînes.Suppression des tirets excessifs avec OR regex

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

Le regex ci-dessus semble fonctionner pour moi regex101, mais pas dans mon code. Je pensais que ce pourrait être à cause de la 'g | modificateur global', mais je suppose que est résolu par le 'All' part à ReplaceAllString()

golang Playground: https://play.golang.org/p/ZR72gZEhZ_
Regex101: https://regex101.com/r/tUYHo1/1

Modifier:
Le problème était que je remplaçais tout avec - tirets, où je voulais réellement supprimer les tirets préfixés et traînants. Au lieu de faire une autre regex, j'utilise maintenant strings.Trim() maintenant.

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

Répondre

3

Vous devez retirer le leader/arrière - symboles, et réduire ceux à l'intérieur de la chaîne. Vous devez diviser les tirets regex dans

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

Et puis utiliser quelque chose comme

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

Voir la Go demo

Notez également que --+? à la fin du motif correspond toujours à seulement 2 traits d'union, vous devez transformer les quantificateurs paresseux en gourmands ones.

+0

Ahh, je vois ce que tu veux dire. Remplacez les doubles traits par des tirets, remplacez les tirets par rien! Aussi bon point sur le modificateur gourmand! –