Lua - 匹配字符串中花括号 {} 外的单词并替换或附加子字符串

我有各种形式相似的字符串:

这是一个在括号外的 句子 { 带一些词的句子{}。{这是一个 在括号内带一些词的句子。} {这是第二个在括号内的句子。} 可能还有一些话来构成另一个 句子

使用 Lua,我想仅匹配字符串中在“{}”括号外的特定单词。例如,我可能只想匹配在括号外的单词“句子”,而不是在括号内出现的“_句子_”。我只想匹配粗体的单词而不是斜体的单词。

怎样实现呢?


编辑:如果我想在保留括号内子字符串的同时追加或替换匹配的单词呢?

示例:将“word”附加到“sentence”上:

这是一个在括号外的 sentenceword {sentence{} with some words. {这是一个 sentence inside braces with some words.}{这是第二个在括号内的句子。} 可能还有一些话来构成另一个 sentenceword

点赞
用户5373986
用户5373986

将下面翻译成中文并且保留原本的 markdown 格式:

最简单的方法是将所有的大括号替换为空字符串,存入一个临时变量,然后可以使用 Lua 的模式匹配来搜索任何你想要的。

你可以使用以下简单的 gsub 代码轻松完成:

local tempStr = startStr:gsub("{.-}","")

其中的 .- 部分是用来匹配大括号 {} 之间的所有字符,gsub 将其全部替换为空字符串。


编辑: 虽然上述方法可以实现替换空字符串,但 DarkWiiPlayer 指出其中的问题是第一个左花括号会和第一个右花括号匹配,这是不正确的。

解决这个问题的方法是使用平衡的花括号(%b{}),就像 DarkWiiPlayer 在他的答案中推荐的一样:

local tempStr = startStr:gsub("%b{}","")
2019-11-22 10:18:36
用户4984564
用户4984564
局部函数 weird_match(word, str)
   返回 str:gsub("%b{}", ''):match(word)
结束函数
  • 用空字符串替换 {}成对字符
  • 在处理后的字符串中查找所需的模式(word
  • 返回匹配的单词(或其捕获,如果有)
2019-11-22 13:00:29