登录
首页 >  Golang >  Go问答

使用 Golang 进行正则表达式的替换

来源:stackoverflow

时间:2024-03-15 19:45:31 480浏览 收藏

在 Golang 中使用正则表达式进行替换时,需要确保正则表达式字符串为 string 类型。此外,可以考虑使用零长度字边界 (\b) 来匹配单词边界,从而更准确地替换完整单词。通过将正则表达式修改为使用 \b 并将字符串类型转换为 string,可以成功实现对单词的替换。

问题内容

在 javascript 中,我有一个单词替换函数,我需要将其转换为 golang,但它似乎没有被替换。我相信我的 golang 正则表达式有问题。

工作 js 示例 - 用完整单词替换街道名称缩写。 我无法进行简单替换,因为有些单词位于字符串的末尾,有些单词前后有空格,有些单词位于字符串的开头,因此我的正则表达式不同。

word.replace(/ rd$/, ' road')
    .replace(' rd ', ' road ')
    .replace(' mkt ', ' market ')
    .replace(' nth ', ' north ')
    .replace(/^nth /, 'north ')
    .replace(/ nth$/, ' north')
    .replace(' pk ', ' park ')
    .replace(/^sth /, 'south ')
    .replace(' sth ', ' south ')
    .replace(' st ', ' street ')

我对 golang 的尝试。

type address struct {
   .....
   streetname string
}

func (address *address) replace(oldword string, newword string) {
    sampleregexp := regexp.mustcompile(oldword)

    result := sampleregexp.replaceallstring(string(address.streetname), newword)

    fmt.println(oldword, newword, result)
    address.streetname = result

}

然后在我的 main.go 中我这样称呼它

address.replace(`/ RD$/`, " ROAD")
    address.replace(" RD ", " ROAD ")
    address.replace(" MKT ", " MARKET ")
    address.replace(" NTH ", " NORTH ")
    address.replace(`/^NTH /`, "NORTH ")
    address.replace(`/ NTH$/`, " NORTH")
    address.replace(" PK ", " PARK ")
    address.replace(`/^STH /`, "SOUTH ")

例如,如果 streetname 是 market rd,我希望它成为 market road,但它不会替换。

可能是因为正则表达式不是 string 类型吗?

我做了一个简单的演示


正确答案


为什么不使用零长度字边界 \b?这会将匹配锚定在任何单词边界。

那么这只是一个问题:

https://go.dev/play/p/TKs1nIaRZWQ

func expandabbreviations(s string) string {
  return rx.replaceallstringfunc(s, func(m string) string {
    r := expansions[strings.tolower(m)]
    if r == "" {
            r = m
        }
        return r
    })
}

var rx = regexp.mustcompile(`\b(?i:rd|mkt|nth|pk|sth|st)\b`)
var expansions = map[string]string{
    "rd":  "road",
    "mkt": "market",
    "nth": "north",
    "pk":  "park",
    "sth": "south",
    "st":  "street",
}

转换

nth 123 pk st sth

NORTH 123 PARK STREET SOUTH

终于介绍完啦!小伙伴们,这篇关于《使用 Golang 进行正则表达式的替换》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>