我可以编写正则表达式来处理这两种情况,比如 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]))
}
}
但我觉得这是一个相当不优雅的解决方案。速度不是问题,但我想知道有没有别的办法。