我在尝试仅替换句子中的整个单词时遇到问题。我尝试了几种方法,但是它不能正常工作。我希望可以在这里得到一些帮助。
所以我使用了以下文章中的代码: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。
我不想砍掉句子或只扫描其中的一部分。我真的需要它来解析整个句子并替换整个单词。我尝试了几种变体,但似乎无法正常工作。任何帮助将不胜感激!!
@@ 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