Lua:
Usuwanie cudzysłowów z ciągu znaków
Jak to zrobić:
Oto jak pozbyć się cudzysłowów w Lua:
local function remove_quotes(str)
return (str:gsub("^%p(.*)%p$", "%1"))
end
print(remove_quotes('"Hello, World!"')) -- Hello, World!
print(remove_quotes("'Goodbye, Quotes!'")) -- Goodbye, Quotes!
I bingo! Te cudzysłowy zniknęły jak skarpetki w pralce.
Pogłębiona analiza
Ludzie usuwali cudzysłowy z ciągów znaków odkąd języki potrafiły obsługiwać tekst, co trwa w zasadzie od zawsze. W Lua funkcja gsub
wykonuje ciężką pracę, używając wzorców niczym skalpel do wycinania cudzysłowów. Alternatywy? Jasne, możesz użyć regex w językach, które go obsługują, albo napisać własną pętlę, która przegląda każdy znak (nuda, ale hej, to twój czas).
Dopasowywanie wzorców w Lua daje ci siłę podobną do doświadczeń z regexem-light bez potrzeby importowania całej biblioteki. Znak caret (^
) i znak dolara ($
) dopasowują odpowiednio początek i koniec ciągu znaków; %p
pasuje do dowolnego znaku interpunkcyjnego. Po pozbyciu się wiodącej i końcowej interpunkcji, przechwytujemy wszystko inne za pomocą (.*),
i zastępujemy całe dopasowanie tą grupą przechwytywania, używając " %1"
.
Pamiętaj, że dopasowywanie wzorców w Lua nie jest tak potężne jak pełnoprawne silniki regex – na przykład, nie potrafi liczyć ani cofać się. Ta prostota jest zarówno błogosławieństwem, jak i przekleństwem, w zależności od tego, jakie cudzysłowy próbujesz uporządkować i gdzie się ukrywają.
Zobacz także
Zanurkuj głębiej w dopasowywanie wzorców w Lua z książką PiL (Programowanie w Lua): http://www.lua.org/pil/20.2.html
Dla czystej elegancji sprawdź, jak inne języki robią to na porównanie, zaczynając od str.strip
w Pythonie: https://docs.python.org/3/library/stdtypes.html#str.strip