String 如何替换中间可能有空格的子字符串

String 如何替换中间可能有空格的子字符串,string,lua,design-patterns,string-matching,String,Lua,Design Patterns,String Matching,在lua中,我需要检测可能包含空格的子字符串 比如说, 我有一根绳子 local str = "Hel lo World" 如何替换此字符串中的“Hello” 我需要使用模式吗 编辑 我想出了这样的主意 local pattern = "[H][ ]*[e][ ]*[l][ ]*[l][ ]*[o]" str:gsub(pattern,"text_to_replace") 这是最佳选择吗?创建字母/空格所在位置的掩码 带状空间 匹配/替换文本 撤消字母/空格的掩码 如果你想做一个函数来实现它

在lua中,我需要检测可能包含空格的子字符串

比如说,

我有一根绳子

local str = "Hel lo World"
如何替换此字符串中的“Hello”

我需要使用模式吗

编辑

我想出了这样的主意

local pattern = "[H][ ]*[e][ ]*[l][ ]*[l][ ]*[o]"
str:gsub(pattern,"text_to_replace")

这是最佳选择吗?

创建字母/空格所在位置的掩码

带状空间

匹配/替换文本

撤消字母/空格的掩码


如果你想做一个函数来实现它。

你可以这样写一个模式生成器:

local spaced_match = function(s)
    local pattern = ''
    for i=1,#s do
       pattern = pattern..s:sub(i,i)..' *'
    end
    return pattern
end

local h = 'hel lo world'
local newh = h:gsub(spaced_match('hello'),'text_to_replace')

这类单词列表是否预定义了
Hello
?代码示例中的所有括号
[]
实际上都是无用的,因为每个括号中只有一个字符
pattern=“H*e*l*l*o”
也可以。啊,很好!我把它推广到其他角色身上。。类似于
[h][^a-z]*[e][^a-z]*[l][^a-z]*[l][^a-z]*[o]
的东西,因此有括号!:)使用模式不是更容易吗?(如原始问题更新中所述)如果所有带有空格的“hel-lo”类型单词都是预定义的,那么是的。如果没有,我想找到空格的位置/去掉它们,替换,最后插入空格,并考虑单词长度的变化(如果单词的长度在变化,从“hello”到“再见”)。编辑:我想不出一个简单的模式可以适用于每种情况:(这个
[h][^a-z]*[e][^a-z]*[l][^a-z]*[l][^a-z]*[o]怎么样
?你能想到这种模式会失败的情况吗?是的!这就是我的想法。我只是想知道是否有比我提到的模式更好的解决方案。。