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
Antwort
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.
Schön und sauber. Der Regex-Teil wird konvertiert, während die anderen Teile, ob oben oder unten, gleich bleiben. Vielen Dank. – scott
Does not
strings.Replace(results, "CN", "cn", -1)
helfen kann? https://golang.org/pkg/strings/#Replace
Der Realm-Teil könnte alles und jede Zahl sein, basierend auf dem Rückgabewert. – scott
Was ist mit diesem Regex: [Regex Demo] (https://regex101.com/r/wN1oF4/1) –
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