gpt4 book ai didi

regex - Lua 模式类似于正则表达式正向前瞻?

转载 作者:行者123 更新时间:2023-12-05 06:45:23 25 4
gpt4 key购买 nike

我有一个字符串,它可以包含任意数量的定界符 §\n。我想从字符串中删除所有定界符,除了最后一次出现的应该保持原样的定界符。最后一个分隔符可以处于三种状态:\n§\n§§\n。最后一个变量定界符之后永远不会有任何字符。

以下是 3 个具有不同状态分隔符的示例:

abc§\ndef§\nghi\n
abc§\ndef§\nghi§\n
abc§\ndef§\nghi§§\n

我想删除除最后一次出现的所有分隔符

所以上面三个例子的gsub的结果应该是:

abcdefghi\n
abcdefghi§\n
abcdefghi§§\n

使用正则表达式,可以使用 §\\n(?=.),它可以正确匹配使用正向先行的所有三种情况,因为在最后一个变量定界符之后永远不会有任何字符.

我知道我可以检查字符串末尾是否有分隔符,然后在使用 Lua 模式 §\n 进行替换后,我可以将分隔符添加回字符串。然而,对于一个应该可以单独使用 Lua 模式来解决的问题,这是一个非常不优雅的解决方案。

那么如何使用 Lua 模式来完成呢?

最佳答案

str:gsub( '§\\n(.)', '%1' ) 应该做你想做的。这将删除定界符,因为它后面跟着另一个字符,将这个字符放回字符串中。

测试代码

local str = {
'abc§\\ndef§\\nghi\\n',
'abc§\\ndef§\\nghi§\\n',
'abc§\\ndef§\\nghi§§\\n',
}

for i = 1, #str do
print( ( str[ i ]:gsub( '§\\n(.)', '%1' ) ) )
end

产量

abcdefghi\n
abcdefghi§\n
abcdefghi§§\n

关于regex - Lua 模式类似于正则表达式正向前瞻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com