String 将多个月字符串替换为月份整数

String 将多个月字符串替换为月份整数,string,go,replace,String,Go,Replace,我正在使用以下字符串: 一月五日、二月六日、十二月六日=900 我希望用各自的Month int值替换Month字符串。因此,上述内容等同于: 1-5,2,6 12=900 我知道使用不区分大小写的正则表达式可能是一个不错的选择,但我只看到过如何将其应用于一个月的示例,这似乎效率低下,例如: re := regexp.MustCompile(`(?i)jan`) fmt.Println(re.ReplaceAllString("JAN-5,Feb,6 dec=900", &q

我正在使用以下字符串:

一月五日、二月六日、十二月六日=900

我希望用各自的Month int值替换Month字符串。因此,上述内容等同于:

1-5,2,6 12=900

我知道使用不区分大小写的正则表达式可能是一个不错的选择,但我只看到过如何将其应用于一个月的示例,这似乎效率低下,例如:

re := regexp.MustCompile(`(?i)jan`)
fmt.Println(re.ReplaceAllString("JAN-5,Feb,6 dec=900", "1"))
有没有一种更简单的方法来执行此操作,而不是对字符串应用12个不同的正则表达式测试?

使用降低字符串,然后您可以使用一个带有12个月的正则表达式,它可以在一个步骤中完成所有可能的替换:

var r = strings.NewReplacer(
    "jan", "1",
    "feb", "2",
    "mar", "3",
    "apr", "4",
    "may", "5",
    "jun", "6",
    "jul", "7",
    "aug", "8",
    "sep", "9",
    "oct", "10",
    "nov", "11",
    "dec", "12",
)

func main() {
    s := "JAN-5,Feb,6 dec=900"

    s2 := r.Replace(strings.ToLower(s))

    fmt.Println(s2)
}
此输出将在以下服务器上进行尝试:

使用降低字符串,然后您可以使用一个12个月的单个字符串,一步完成所有可能的替换:

var r = strings.NewReplacer(
    "jan", "1",
    "feb", "2",
    "mar", "3",
    "apr", "4",
    "may", "5",
    "jun", "6",
    "jul", "7",
    "aug", "8",
    "sep", "9",
    "oct", "10",
    "nov", "11",
    "dec", "12",
)

func main() {
    s := "JAN-5,Feb,6 dec=900"

    s2 := r.Replace(strings.ToLower(s))

    fmt.Println(s2)
}
此输出将在以下服务器上进行尝试:


您需要保持字符串的其余部分完好无损吗?如果字符串的其他部分变为小写,可以吗?`似乎没有效率'。不要假设性能问题,测量它。对于非常高的性能,您可以编写自己的lexer/parser,但这只是在您真正需要它的时候。Regexp会带来很多问题,比如重做攻击。一个简单的带有normalize字符串的ReplaceAll可以完成job@icza完整的大小写不应该是一个问题,因为唯一的字母顺序字符将是month字符串,因此最终将替换为它们的int等价物。字符串中的任何其他字符都是特殊字符,例如,=/etc@Ôrel是否可以一次性使用ReplaceAll?或者,有12个ReplaceAll来解析每个可能的选项..?您可以使用;您需要保持字符串的其余部分完好无损吗?如果字符串的其他部分变为小写,可以吗?`似乎没有效率'。不要假设性能问题,测量它。对于非常高的性能,您可以编写自己的lexer/parser,但这只是在您真正需要它的时候。Regexp会带来很多问题,比如重做攻击。一个简单的带有normalize字符串的ReplaceAll可以完成job@icza完整的大小写不应该是一个问题,因为唯一的字母顺序字符将是month字符串,因此最终将替换为它们的int等价物。字符串中的任何其他字符都是特殊字符,例如,=/etc@Ôrel是否可以一次性使用ReplaceAll?或者,有12个ReplaceAll来解析每个可能的选项..?您可以使用;这太神奇了。我从来没有听说过弦。NewReplacer和这个完美的作品!这太神奇了。我从来没有听说过弦。NewReplacer和这个完美的作品!