【发布时间】:2021-01-23 07:09:22
【问题描述】:
我正在使用如下字符串:
"JAN-5,Feb,6 dec=900"
我希望将 Month 字符串替换为它们各自的月份 int 值。所以上面就相当于:
"1-5,2,6 12=900"
我知道使用不区分大小写的正则表达式可能是可行的方法,但是我只看到了如何一次将其应用于一个月的示例,这似乎效率低下,例如:
re := regexp.MustCompile(`(?i)jan`)
fmt.Println(re.ReplaceAllString("JAN-5,Feb,6 dec=900", "1"))
有没有比对字符串应用 12 种不同的正则表达式测试更简单的方法?
【问题讨论】:
-
您需要保留字符串“case-intact”的其余部分吗?如果字符串的其他部分变成小写,可以吗?
-
` 似乎效率低下` 不要假设性能问题,测量它。对于非常高的性能,您可以编写自己的词法分析器/解析器,但这仅在您真正需要的时候。正则表达式会带来很多问题,例如 ReDos 攻击。带有规范化字符串的简单
ReplaceAll可以完成这项工作 -
@icza 大小写完整不应该是一个问题,因为唯一的字母字符将是月份字符串,因此最终替换为它们的 int 等价物。字符串中的任何其他字符都是特殊字符,例如“,=/”等
-
@Ôrel 可以使用一次
ReplaceAll吗?还是有 12 个 ReplaceAll 来解析每个可能的选项..? -
你也许可以使用; golang.org/pkg/strings/#NewReplacer