2016-04-19 35 views
3

私はActivedirectoryからいくつかのエントリを取得しているldapオブジェクトを使って作業しています。結果は、領域がcn=bob,dc=example,dc=comの代わりにCN=bob,DC=example,DC=comのように大文字で返されるような結果になります。 CNDC部分文字列を選択的に小文字に変換する方法はありますか?私はCN、DCなどをリストに入れてstrings.ToLowerを使用してポイントに到達するためにstrings.splitを複数回使用していました( "、"を最初に使用し、 "="を使用して再度繰り返します) 。おそらくregexを使って2回の反復を避けることができるようにするためには、これを行うにはより良い方法とスマートな方法がありますか?golang文字列を小文字に選択的に変換する

+0

この正規表現について:[正規表現のデモ](https://regex101.com/r/wN1oF4/1) –

+0

ありがとう@lbarros、私は '([AZ] {2})=とのマッチを得ることができました。間に「OU」が来ると、+、([AZ] {2})=。+、([AZ] {2})=。+ '返されたエントリに基づいて異なります。 – scott

答えて

4

= TP下部ケースに続くテキストをすべて大文字の塊を作るための正規表現の方法です:

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

Playground demo

正規表現を参照してください - [A-Z]+=から1以上の大文字ASCIIと一致します手紙の後に=と書かれています。次に、ReplaceAllStringFuncの内部では、「匿名関数」を使用して修正された一致値を返すことができます。

+1

ニースとクリーン。正規表現部分は変換されますが、他の部分は上か下かに関わらず同じです。ありがとうございました。 – scott

関連する問題