【问题标题】:golang selective conversion of string to lower casegolang选择性地将字符串转换为小写
【发布时间】:2016-08-11 13:28:53
【问题描述】:

我正在使用一个 ldap 对象,我从 Activedirectory 中检索一些条目。结果是以大写形式返回的领域,例如CN=bob,DC=example,DC=com 而不是cn=bob,dc=example,dc=com。有没有办法选择性地将CNDC 子字符串转换为小写?到目前为止,我多次使用strings.split(首先使用“,”,然后再次使用“=”迭代)以达到可以将CN、DC等放入列表的程度,然后使用strings.ToLower在他们。有没有更好更聪明的方法来完成这项工作,可能使用正则表达式,这样我就可以避免两次迭代?

【问题讨论】:

  • 这个正则表达式怎么样:Regex Demo
  • 谢谢@lbarros,我可以用([A-Z]{2})=.+,([A-Z]{2})=.+,([A-Z]{2})=.+ 得到匹配,但如果OU 介于两者之间,字段的数量可能会有所不同。它根据返回的条目而有所不同。

标签: regex string go iteration tolower


【解决方案1】:

这是一种使所有大写文本块后跟= 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 内部,我们可以使用“匿名函数”返回修改后的匹配值。

【讨论】:

  • 干净整洁。正则表达式部分被转换,而其他部分,无论是上部还是下部,都保持不变。谢谢。
【解决方案2】:

没有

strings.Replace(results, "CN", "cn", -1)

可以帮忙吗? https://golang.org/pkg/strings/#Replace

【讨论】:

  • 领域部分可以是任何东西,任何数字,基于返回值。
猜你喜欢
  • 2018-06-17
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
相关资源
最近更新 更多