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

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

в Python?

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

9 ответов

46 просмотров
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
нет не пропутиил, почитай код внимательно. Выхлоп ...

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта