String 计算字符串中一个或多个子字符串的出现次数
我知道,为了计算一个子字符串的出现次数,我可以使用“strings.Count(,)”。如果要计算子字符串1或子字符串2的出现次数,该怎么办?还有比用strings.count()写另一行更优雅的方法吗?使用:String 计算字符串中一个或多个子字符串的出现次数,string,algorithm,go,String,Algorithm,Go,我知道,为了计算一个子字符串的出现次数,我可以使用“strings.Count(,)”。如果要计算子字符串1或子字符串2的出现次数,该怎么办?还有比用strings.count()写另一行更优雅的方法吗?使用: 另一种进行子字符串匹配的方法是使用包。以下是匹配多个模式的示例: package main import ( "fmt" "index/suffixarray" "regexp" ) func main() { r := regexp.MustCom
另一种进行子字符串匹配的方法是使用包。以下是匹配多个模式的示例:
package main
import (
"fmt"
"index/suffixarray"
"regexp"
)
func main() {
r := regexp.MustCompile("an")
index := suffixarray.New([]byte("banana"))
results := index.FindAllIndex(r, -1)
fmt.Println(len(results))
}
您还可以将单个子字符串与函数匹配。如果您想在一个大字符串中计算匹配的数量,而不需要为所有索引分配空间来获得长度,然后将其丢弃,您可以在循环中使用来匹配连续的子字符串:
func countMatches(s字符串,re*regexp.regexp)int{
总数:=0
对于开始:=0;开始<长度(s){
剩余:=s[start://切片字符串很便宜
loc:=重新查找字符串索引(剩余)
如果loc==nil{
打破
}
//loc[0]是比赛的开始索引,
//loc[1]为最终索引(不含)
start+=loc[1]
总数++
}
返回总数
}
func main(){
s:=“abracadabra”
fmt.Println(countMatches(s,regexp.MustCompile(`a | b`)))
}
如果在“abb”中搜索“ab”和“bb”,出现的次数是多少?也就是说,你想计算非重叠实例还是重叠实例?@PaulHankin应该是这种情况下的一个实例。谢谢你提醒我regex!我阅读了文档,但找不到字符串是变量的情况。所以我想知道如果单词是可变的,我不知道有多少,Golang的正则表达式支持吗?@Iceear:我不明白你的意思。这与正则表达式没有任何关系,你只是想知道如何格式化字符串吗?我弄明白了,我创建了一个空字符串,并在字符串中附加变量名和“|”来构造正则表达式。
package main
import (
"fmt"
"index/suffixarray"
"regexp"
)
func main() {
r := regexp.MustCompile("an")
index := suffixarray.New([]byte("banana"))
results := index.FindAllIndex(r, -1)
fmt.Println(len(results))
}