任意の数の区切り文字を含むことができる文字列があります§\n
。そのままにしておく必要がある最後のオカレンスを除いて、文字列からすべての区切り文字を削除したいと思います。最後の区切り文字は、次の3つの状態になります\n
、§\n
または§§\n
。最後の変数区切り文字の後に文字が含まれることはありません。
状態区切り文字が異なる3つの例を次に示します。
abc§\ndef§\nghi\n
abc§\ndef§\nghi§\n
abc§\ndef§\nghi§§\n
最後に出現したものを除くすべての区切り文字を削除したいと思います。
したがって、上記の3つの例のgsubの結果は次のようになります。
abcdefghi\n
abcdefghi§\n
abcdefghi§§\n
正規表現を使用すると§\\n(?=.)
、を使用できます。これは、最後の変数区切り文字の後に文字が存在しないため、ポジティブルックアヘッドを使用して3つのケースすべてに適切に一致します。
文字列の最後に区切り文字があるかどうかを確認し、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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加