2016-04-19 21 views
3

Ich arbeite mit einem LDAP-Objekt, wo ich einige Einträge aus Active Directory abruft. Die Ergebnisse sind so, dass der Bereich in Großbuchstaben zurückgegeben wird, wie CN=bob,DC=example,DC=com anstelle von cn=bob,dc=example,dc=com. Gibt es eine Möglichkeit, die Teilstrings CN und DC selektiv in Kleinbuchstaben umzuwandeln? Sofar, ich benutzte strings.split mehrere Male (mit "," zuerst und dann wiederholend mit "="), um zu dem Punkt zu kommen, wo ich CN, DC usw. in eine Liste bekommen kann, und dann Strings.ToLower auf ihnen verwenden . Gibt es einen besseren und intelligenteren Weg, dies zu tun, möglicherweise mit Regex, so dass ich möglicherweise zwei Iterationen vermeiden kann?Golan selektive Umwandlung von Zeichenfolge in Kleinbuchstaben

+0

Was ist mit diesem Regex: [Regex Demo] (https://regex101.com/r/wN1oF4/1) –

+0

Danke @lbarros, ich könnte diese Übereinstimmung mit '([AZ] {2}) = bekommen. +, ([AZ] {2}) =. +, ([AZ] {2}) =. + 'Aber die Anzahl der Felder könnte variieren, wenn eine' OU' dazwischen kommt. Es variiert basierend auf dem zurückgegebenen Eintrag. – scott

Antwort

4

Hier ist eine regex Weise alle Großtextteile mit einem = tp Kleinbuchstaben gefolgt zu machen:

package main 

import (
     "fmt" 
     "strings" 
     "regexp" 
) 

func main() { 
     input := "CN=bob,DC=example,DC=com" 
     r := regexp.MustCompile(`[A-Z]+=`) 
     fmt.Println(r.ReplaceAllStringFunc(input, func(m string) string { 
       return strings.ToLower(m) 
     })) 
} 

Siehe Playground demo

die Regex - [A-Z]+= - Spiele 1 oder mehr Großbuchstaben ASCII Buchstaben und eine = nach ihnen. Dann können wir innerhalb der ReplaceAllStringFunc eine "anonyme Funktion" verwenden, um einen geänderten Übereinstimmungswert zurückzugeben.

+1

Schön und sauber. Der Regex-Teil wird konvertiert, während die anderen Teile, ob oben oder unten, gleich bleiben. Vielen Dank. – scott

Verwandte Themen