Regex mit Ersetzen in Golang

11

Ich habe das regexp-Paket verwendet, um den folgenden Text zu ersetzen

%Vor%

aber ich konnte "Produkte" nicht ersetzen, ohne ein anderes Wort wie "products_list" zu ersetzen, und Golang hat keine Funktion wie re.ReplaceAllStringSubmatch , um mit submatch zu ersetzen (es gibt nur FindAllStringSubmatch). Ich habe re.ReplaceAllString verwendet, um "products" durch zu ersetzen.

%Vor%

Es ist nicht das, was ich will und ich brauche unter dem Ergebnis:

%Vor%     
Massoud Afrashteh 17.05.2016, 11:03
quelle

1 Antwort

15

Sie können Capture-Gruppen mit Alternationen verwenden, die entweder String-Grenzen oder ein Zeichen nicht _ (immer noch mit einer Wortgrenze) entsprechen:

%Vor%

Hier ist die Go-Demo und eine Regex-Demo .

Hinweise zum Muster:

  • (^|[^_]) - Anfang der Zeichenfolge ( ^ ) oder ein anderes Zeichen als _
  • \bproducts\b - ein ganzes Wort "Produkte"
  • ([^_]|$) - entweder ein nicht _ oder das Ende von string.

Im Ersetzungsmuster verwenden wir Rückverweise, um die mit den Klammern erfassten Zeichen (Erfassungsgruppen) wiederherzustellen.

    
Wiktor Stribiżew 17.05.2016, 11:10
quelle

Tags und Links