小编典典

如何在 Go 中执行不区分大小写的正则表达式?

go

现在,当然,我可以编写我的正则表达式来处理这两种情况,例如regexp.Compile("[a-zA-Z]"),但我的正则表达式是根据用户提供的字符串构造的:

reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))

s.Name名字在哪里。这可能类似于“西北偏北”。现在,对我来说最明显的解决方案是遍历每个字符s.Name并为每个字母写上“[nN]”:

for i := 0; i < len(s.Name); i++ {
  if s.Name[i] == " " {
    fmt.Fprintf(str, "%s[ \\._-]", str);
  } else {
    fmt.Fprintf(str, "%s[%s%s]", str, strings.ToLower(s.Name[i]), strings.ToUpper(s.Name[i]))
  }
}

但我觉得这是一个相当不优雅的解决方案。速度并不是真正的问题,但我需要知道是否有其他方法。


阅读 530

收藏
2021-12-01

共1个答案

小编典典

您可以将不区分大小写的标志设置为正则表达式中的第一项。

您可以通过添加"(?i)"到正则表达式的开头来做到这一点。

reg, err := regexp.Compile("(?i)"+strings.Replace(s.Name, " ", "[ \\._-]", -1))

对于固定的正则表达式,它看起来像这样。

r := regexp.MustCompile(`(?i)CaSe`)
2021-12-01