【问题标题】:How to efficiently replace words in a string with a random replacement words? [duplicate]如何用随机替换词有效地替换字符串中的词? [复制]
【发布时间】:2020-04-13 12:26:31
【问题描述】:

我需要创建一个函数,用预定义的唯一替换替换字符串中单词的占位符。新生成的字符串不应包含重复的替换词,应随机选择。假设替换数组包含足够的单词。 示例:

replacement := []string{"Cat", "Dog"}
s := "{replacement} text {replacement}"
result := "Cat text Dog"

我正在考虑做这样的事情:

  1. 当单词包含替换占位符时,随机选择一个唯一的替换单词并将其替换为选定的单词。
  2. 继续上述操作,直到所有替换占位符都被替换。

【问题讨论】:

标签: string go substring


【解决方案1】:

标准包regexp 有一个*Regexp.ReplaceAllStringFunc 就是为了这个:

来自文档:

ReplaceAllStringFunc 返回 src 的副本,其中 Regexp 的所有匹配项都已替换为应用于匹配子字符串的函数 repl 的返回值。 repl 返回的替换被直接替换,不使用 Expand。

要替换它而不重复替换,您可以使用rand.Shufflereplacement 洗牌,然后逐个使用它的内容。

例如:

rand.Shuffle(len(rep), reflect.Swapper(rep))
var err error
res := pattern.ReplaceAllStringFunc(s, func(x string) string {
    if len(rep) == 0 {
        err = errors.New("Not enough replacements for string.")
        return "<not enough replacement>"
    }
    s, rep = rep[0], rep[1:]
    return s
})

游乐场:https://play.golang.org/p/_FuFqT5rHJc

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 2012-05-29
  • 2019-04-24
  • 1970-01-01
  • 2012-03-16
  • 2012-09-13
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多