【发布时间】:2014-08-10 00:22:18
【问题描述】:
我有一个字符串可以包含任意数量的分隔符§\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 模式来完成呢?
【问题讨论】:
-
您用作分隔符的字符的 unicode / 名称是什么?
-
字符串“§\n”(节符号后跟换行符)是分隔符。 Unicode:U+00A7 后跟 U+000A。
-
我可能会先捕获最后的分隔符,将它们全部删除,然后将捕获的分隔符附加到末尾。
-
我目前正在我的生产代码中这样做,但我想只使用 gsub 而不在之后附加分隔符。这不是一个 bad 解决方案,但我确信单独使用 gsub 可以做得更好,这就是我问这个问题的原因。
标签: regex lua lua-patterns