Lua: 替换字符串中的字符

我有这样的字符串

abcdef
abcd|(
abcde|(foo
abcd|)
abcde|)foo

它们应该被修改为

abcdef
abcd
abcde \foo
abcd
abcde \foo
  • 如果没有 | 则不做任何操作
  • 如果 |(|) 后面没有内容,则删除这两个字符
  • 如果有内容,则使用 <space>\ 替换 |(|)

如果可能的话,我对使用短模式表达式很感兴趣。我可以通过多次使用 string.findstring.sub 实现此目的,但那样就需要很多 if 语句。

点赞
用户3832970
用户3832970

你可以使用

function repl(v)
    res, _ = string.gsub(v:gsub('|[()]$', ''), '|[()]', ' \\')
    return res
end

查看 Lua demo 在线演示

细节说明

  • '|[()]$' 匹配以 |,然后在字符串末尾要么是 ( 要么是 )string.gsub 用空字符串替换这些出现的地方
  • |[()] 然后匹配 |,然后在任意位置匹配 ()string.gsub 将这些出现的位置替换为空格和 \
2018-10-03 08:01:52