169 похожих чатов

Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape

в Python?

Из доки:
» Escape all the characters in pattern except ASCII letters and numbers

9 ответов

47 просмотров
Daniil-Smolyakov Автор вопроса

function escapeString(str) local escapedStr = "" for i = 1, #str do local char = string.sub(str, i, i) if string.match(char, "[^%a%d]") then escapedStr = escapedStr .. "\\" .. char else escapedStr = escapedStr .. char end end return escapedStr end function unescapeString(str) local unescapedStr = "" local i = 1 while i <= #str do local char = string.sub(str, i, i) if char == "\\" then i = i + 1 char = string.sub(str, i, i) end unescapedStr = unescapedStr .. char i = i + 1 end return unescapedStr end local inputString = "Hello, \\world! 123" local escapedString = escapeString(inputString) local unescapedString = unescapeString(escapedString) print(inputString) print(escapedString) print(unescapedString)

ммм... у тебя старая версия питона что-ли? В питоне у этой функции именно задача убрать из строки символы, которые имеют специальное значение в библиотеке паттерн марчинга. В луа аналог со схожим смыслом функционала был-бы например таким (с обратными слешами лишнее, это я сделал чтобы всё это дело можно было легко скопипастить с выхлопа интерпретатора снова в строку): repl = { ['\\'] = '\\\\' } string.gsub('Hello, \\world! [_%w] 123', '[%^%$%(%)%%%.%[%]%*%+%-%?\\%.]', function(c) if repl[c] then return repl[c] else return '%'..(c) end end) -- Hello, \\world! %[_%%w%] 123 4 string.find('Hello, \\world! [_%w] 123', "Hello, \\world! %[_%%w%] 123") -- 1 24

Daniil-Smolyakov Автор вопроса
UtoECat
screenshot ммм... у тебя старая версия питона что-ли? В питон...

Ну я тоже долго не сидел) И мне нравится, что читается легко - никто после меня не будет полчаса сидеть думать, как это работает))

лучше узнай более точно что от тебя хотят по возможностям. А то может они этим аргументы SQL запроса экранировать будут...

Daniil Smolyakov
Ну я тоже долго не сидел) И мне нравится, что чита...

если просто заменить всё что не буквы-цифры, то ещё проще : string.gsub('Hello, \\world! 123', '[^%w ]', function(c) return '\\'..string.byte(c) end) -- Hello\44 \92world\33 123 3 print("Hello\44 \92world\33 123") -- Hello, \world! 123

Daniil-Smolyakov Автор вопроса
UtoECat
если просто заменить всё что не буквы-цифры, то ещ...

Запятую и восклицательный знак пропустил)

Daniil Smolyakov
Запятую и восклицательный знак пропустил)

нет не пропутиил, почитай код внимательно. Выхлоп функии выше - в принте аргументом

Daniil-Smolyakov Автор вопроса
UtoECat
нет не пропутиил, почитай код внимательно. Выхлоп ...

Да-да, норм. Я просто скопипастил и запустил, а у тебя не для этого пример)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта