Golang 提取字符串中的中文(可贪婪匹配和正常匹配)中文字符串截取

1854人浏览 2022-03-10

Golang 提取字符串中的中文(可贪婪匹配和正常匹配)

匹配效果:

原字符串:

"Yiwu Jingfeng Trading Co., Ltd. 北京市(竞丰)贸易有限公司 (Co.)"

贪婪匹配结果:

"北京市竞丰贸易有限公司"

正常匹配结果:

"北京市(竞丰)贸易有限公司"

 

代码:

// MatchChineseForStr 提取字符串中的中文
//matchType = 1 贪婪匹配,仅提取中文  2 正常匹配从第一个中文开始到最后一个中文结束
func MatchChineseForStr(str string, matchType int) string {
	r := []rune(str)
	cnStr := ""
	if matchType == 1 {
		for i := 0; i < len(r); i++ {
			if r[i] <= 40869 && r[i] >= 19968 {
				cnStr = cnStr + string(r[i])
			}
		}
		if cnStr == "" {
			return str
		}
		return cnStr
	} else {
		//提取第一个中文到结尾
		beginIndex := false
		for i := 0; i < len(r); i++ {
			if beginIndex == false {
				if r[i] <= 40869 && r[i] >= 19968 {
					beginIndex = true
				}
			}
			if beginIndex {
				cnStr += string(r[i])
			}
		}
		//去掉尾部非中文
		waitRune := []rune(cnStr)
		waitRes := ""
		endIndex := false
		for i := len(waitRune) - 1; i >= 0; i-- {
			if endIndex == false {
				if waitRune[i] <= 40869 && waitRune[i] >= 19968 {
					endIndex = true
				}
			}
			if endIndex {
				waitRes += string(waitRune[i])
			}
		}
		//翻转
		lastStr := ""
		lastRune := []rune(waitRes)
		for i := len(lastRune) - 1; i >= 0; i-- {
			lastStr += string(lastRune[i])
		}
		if lastStr == "" {
			return str
		}
		return lastStr
	}
}

 

 

推荐文章

GORM 自定义结构体关联的数据库表名称和自定义结构体字段对应的数据表字段名
2021-02-23
KChatRoom在线多人聊天室,项目是使用Websocket和Gin框架基于Golang开发的在线聊天室
2021-05-17
Gin框架下获取所有路由信息
2021-07-14
搜索文章