我有一些字符串,例如E2 9NZ, N29DZ, EW29DZ。给定上面的示例E,我需要在第一个数字之前提取字符: , N, EW。我应该使用正则表达式吗?该字符串包看起来真的不错,但似乎并不来处理这种情况(特定类型之前提取的所有内容)。编辑:为了澄清“问题:”我不知道用什么方法是更地道,以去,也许有可能提供更好的性能。
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
我认为最好的选择是使用返回的索引strings.IndexAny,它将返回字符串中任何字符的第一个索引。
func BeforeNumbers(str string) string {
value := strings.IndexAny(str,"0123456789")
if value >= 0 && value <= len(str) {
return str[:value]
}
return str
}
将对字符串进行切片并将子切片返回到(但不包括)字符串中的第一个字符,该字符"0123456789"是任意数字。
稍后编辑:
使用 IndexFunc 而不是 IndexAny 可能会更好:
func BeforeNumbers(str string) string {
indexFunc := func(r rune) bool {
return r >= '0' && r <= '9'
}
value := strings.IndexFunc(str,indexFunc)
if value >= 0 && value <= len(str) {
return str[:value]
}
return str
}
这或多或少相当于循环版本,并消除了对长字符串的搜索以检查我之前答案中的每个字符是否匹配。但我觉得它看起来比循环版本更干净,这显然是一种品味。
- 3 回答
- 0 关注
- 270 浏览
添加回答
举报
0/150
提交
取消