仅替换LUA string.gsub()中的整个单词,忽略冒号等魔术字符

问题描述 投票:0回答:1

我在尝试仅替换句子中的整个单词时遇到问题。我尝试了几种方法,但是它不能正常工作。我希望可以在这里得到一些帮助。

所以我使用了以下文章中的代码:Use string.gsub to replace strings, but only whole words

function replacetext(source, find, replace, wholeword)
  if wholeword then
    find = '%f[%a]'..find..'%f[%A]'
  end
  return (source:gsub(find,replace))
end

这是我用来测试的演示代码。

local source  = '|Hplayer:YarnBarn-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345YarnBarn|r]|h whispers: this is a test YarnBarn YarnBarnME testing for % YarnBarn finally :YarnBarn# YarnBarn'
local find    = 'YarnBarn'
local replace = 'NOODLE'

print(replacetext(source, find, replace, true ))

我得到的输出如下:

|Hplayer:NOODLE-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345NOODLE|r]|h whispers: this is a test NOODLE YarnBarnME testing for % NOODLE finally :NOODLE# NOODLE

但是,以上是不正确的,因为它是将单词与前面的冒号匹配,并且显然考虑了特殊字符或魔术字符。

正确的回报应该是这样的:

|Hplayer:YarnBarn-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345YarnBarn|r]|h whispers: this is a test NOODLE YarnBarnME testing for % NOODLE finally :YarnBarn# NOODLE

我正在尝试使其完全替换整个单词,而在单词的前面或后面都没有任何内容。这包括特殊字符或冒号。这就是为什么在正确的输出上,您会注意到只有YarnBarn的独立单词被转换为NOODLE

我不想砍掉句子或只扫描其中的一部分。我真的需要它来解析整个句子并替换整个单词。我尝试了几种变体,但似乎无法正常工作。任何帮助将不胜感激!!

lua
1个回答
0
投票

@@ EgorSkriptunoff发布了此解决方案。

function replacetext(source, find, replace, wholeword)
  if wholeword then
    find = "%f[^%z%s]"..find.."%f[%z%s]"
  end
  return (source:gsub(find,replace))
end
© www.soinside.com 2019 - 2024. All rights reserved.