gpt4 book ai didi

regex - 在正则表达式分词中包含多个模式

转载 作者:IT王子 更新时间:2023-10-29 02:10:13 36 4
gpt4 key购买 nike

我有以下程序,它使用正则表达式搜索模式并将其替换为关键字。

如下所示的示例会将“Incorp”、“Inc.”、“Inc corp”等名称替换为“Inc”。

package main

import (
"fmt"
"regexp"
)

func replaceWholeWord(input string, patterns map[string]string) string {
for searchPattern, replacePattern := range patterns {
re, _ := regexp.Compile(`(?i)(^|\s)` + regexp.QuoteMeta(searchPattern) + `(\s|$)`)
input = re.ReplaceAllString(input, "${1}"+replacePattern+"${2}")
}
return input
}

func main() {

patterns := map[string]string{"Inc.": "Inc", "Incorp.": "Inc", "Incorporation": "Inc", ", Incorpa.": "Inc"}
fmt.Println(replaceWholeWord("ABC Inc.", patterns))
fmt.Println(replaceWholeWord("ABC Incorp.", patterns))
fmt.Println(replaceWholeWord("ABC InCorp.", patterns))
fmt.Println(replaceWholeWord("ABC InCorporation", patterns))
fmt.Println(replaceWholeWord("ABC , InCorpa.", patterns))
}

正如您所看到的,随着模式数量的增加,性能会变得非常紧张。我只想构建一次正则表达式并进行搜索和替换操作。我正面临添加这些倍数的困难时期单个正则表达式中的模式,而不会破坏功能。

编辑:我修改了我的程序以避免仅当单词具有模式时才构建正则表达式,这样我就避免了性能损失。请随时关闭问题。

最佳答案

我不是 GO 开发人员,但您所展示的内容的单个正则表达式模式是:


(In(c|C)(\.|orp(\.|a\.|oration)))$

更新:找到了 GO 方式。


package main

import (
"fmt"
"regexp"
)

func main() {

re := regexp.MustCompile(`(?i)^(.*)(?:Inc(?:\.|orp(?:\.|a|oration)??\.))(.*)$`)

fmt.Println(re.ReplaceAllString("ABC Inc.", "${1}Inc${2}"))
fmt.Println(re.ReplaceAllString("ABC Incorp.", "${1}Inc${2}"))
fmt.Println(re.ReplaceAllString("ABC InCorporation.", "${1}Inc${2}"))
fmt.Println(re.ReplaceAllString("ABC InCorpa.", "${1}Inc${2}"))

}

ABC Inc
ABC Inc
ABC Inc
ABC Inc

关于regex - 在正则表达式分词中包含多个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48838813/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com