现在,当然,我可以编写正则表达式来处理这两种情况,例如regexp.Compile("[a-zA-Z]"),但是我的正则表达式是由用户提供的字符串构造的:
regexp.Compile("[a-zA-Z]")
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
s.Name名字在哪里。可能类似于“西北偏北”。现在,对我来说,最明显的解决方案是遍历每个字符,s.Name并为每个字母写“ [nN]”:
s.Name
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])) } }
但是我觉得这是一个不太优雅的解决方案。速度并不是真正的问题,但是我需要知道是否还有另一种方法。
您可以将不区分大小写的标志设置为正则表达式中的第一项。
您可以通过添加"(?i)"到正则表达式的开头来实现。
"(?i)"
reg, err := regexp.Compile("(?i)"+strings.Replace(s.Name, " ", "[ \\._-]", -1))
对于固定的正则表达式,它看起来像这样。
r := regexp.MustCompile(`(?i)CaSe`)
有关标志的更多信息,请在 regexp/syntax软件包文档(或语法文档)中搜索术语“标志”。
regexp/syntax