@ru_python

Страница 7124 из 9768
Александр
22.11.2018
06:20:06
Удобно, например, конфиги в yaml хранить и вызывать что-то типа DataBaseConfig.from_yaml

Ну ты не изучил мою либу

Tishka17
22.11.2018
06:21:02
Как нельзя, если можно?
Видимо, уже не помню

Google
Александр
22.11.2018
06:21:29
Там есть параметр use_datetime

Yegor
22.11.2018
06:21:59
Yegor Kowalew: Доброе утро дядьки. А кто сможет быстро подсказать как встроке найти любую не последовательность символов? И я еще хочу чтоб это искалось в джанге Например: Строка: 321,23,6,78 Ищем: 236 и это совпадение

Александр
22.11.2018
06:22:27
Для json он просто ставится в False, чтобы в строку преобразовывать, а для своего формата ставишь в True и делаешь потом что угодно с datetime object

Кому интересно, это мы обсуждаем вот это: https://github.com/Fatal1ty/mashumaro

И все равно, уже например нельзя сделать два as_dict с разным поведением
Это поведение параметризуется, как я сказал выше

Tishka17
22.11.2018
06:24:15
Окей, если так

Там есть параметр use_datetime
Ок, я думал он потом в сгенерированный код уже не подставляется

Александр
22.11.2018
06:25:32
Подставляется

Александр
22.11.2018
06:26:14
Это ж метод для использования потом, а не для начальной генерации парсера

Yegor
22.11.2018
06:27:34
сначала удали все ненужные, а потом ищи вхождение
в искомой строке, все символы нужные

Google
Aragaer
22.11.2018
06:29:34
запятые же

>>> "236" in "321,23,6,78".replace(",", "") True

Yegor
22.11.2018
06:31:09
3214 3ц21а4 35пы14 для 314 true

Khachatur
22.11.2018
06:31:47
3214 3ц21а4 35пы14 для 314 true
Ты и тут и там:)))

Yegor
22.11.2018
06:32:15
Khachatur
22.11.2018
06:32:22
Сначала тебе нужно в любом случае почистить строку.

Yegor
22.11.2018
06:33:52
От чего? Есть название детали "СМВУ.000321.000" мне надо чтоб пользователю было все-равно что вводить или с точками или без или через один символ или вообще чтоб он ввел су и эта строка ему нашлась

Dmitriy
22.11.2018
06:35:04
А "ус"?

Aragaer
22.11.2018
06:37:52
я не вижу, как можно по "СУ" найти СМВУ

точки хрен с ним - убрать. И запятые

Владислав
22.11.2018
06:38:12
Хммм, ты вроде можешь сгенерить регулярку и регуляркой матчить

Dmitriy
22.11.2018
06:38:55
Если порядок символов надо сохранять, то можно построить стремнейший граф для индексации, где будут матчиться посимвольно по порядку

Aragaer
22.11.2018
06:39:26
или генерить регекспчик

search_re = '.*?'.join(search_str)

Владислав
22.11.2018
06:39:46
В регулярке прост после каждого символа *

Dmitriy
22.11.2018
06:40:02
Регуляркой по базе проходиться - это суровее, чем посимвольный граф :)

Владислав
22.11.2018
06:40:41
Ты имеешь ввиду автомат построить?

Это же более стремно

Google
Dmitriy
22.11.2018
06:40:59
Скорее дерево, только структуру надо думать

Ну и да, в sql это тоже не выйдет :(

Владислав
22.11.2018
06:41:56
Бд из коробке вроде в регулярки умеет

А в деревья сложн

Dmitriy
22.11.2018
06:42:07
Ага

Yegor
22.11.2018
06:46:56
записей сейчас 15К

хочу регексп без всяких заморочек

пусть мучает сервак

Aragaer
22.11.2018
06:47:37
я ж показал

Yegor
22.11.2018
06:47:50
я ж показал
сейчас занимаюсь

Tishka17
22.11.2018
06:49:16
def find(string, req): n=-1 for x in req: n=string.find(x, n+1) if n<0: return False return True assert find("qwe.rty", "qt") assert not find("qwe", "ee")

Нафиг регексп

Aragaer
22.11.2018
06:49:38
эффект тот же

только выполняется внутри стейтмашины регекспа, а значит в каком-то оптимизированном коде

Tishka17
22.11.2018
06:50:26
search_re = '.*?'.join(search_str)
Не забываем экранировать символы

И зачем там вопрос?

Aragaer
22.11.2018
06:50:42
какие и где?

Tishka17
22.11.2018
06:50:50
Ну юзер захочет найти точку

Google
Aragaer
22.11.2018
06:50:51
ну - нежадный захват

Tishka17
22.11.2018
06:50:53
Или скобку

Aragaer
22.11.2018
06:50:54
а

Tishka17
22.11.2018
06:51:28
search_re = '.*?'.join(search_str)
".*?".join(re.escape(x) for x in search_str)

Cykooz
22.11.2018
06:53:59
только выполняется внутри стейтмашины регекспа, а значит в каком-то оптимизированном коде
Не факт что в данной задаче рекегсп будет быстрым - это надо тестировать. Поиск символа в строке (да ещё если и стартовую позицию указать) работает достаточно быстро, он тоже не палками сделан и оптимизирован.

Aragaer
22.11.2018
06:54:52
поиск символа в строке это выныривать в питонокод после каждого найденного символа

если какой-нибудь jit был бы, может быть

Tishka17
22.11.2018
06:55:12
С нежадными может норм будет

Но лучше тест

Aragaer
22.11.2018
06:55:47
а, не, я понял беду регекспа

в случае, когда совпадения нет, он будет еще пыхтеть и надеяться его найти

то есть при попытке найти abc в abb он сначала найдет первую a, потом первую b, потом не найдет c и подумает "чот не то, попробую найти другую b"

а потом все равно не найдет c и подумает "не, надо искать другую a"

и для случая aaaaaaaabbbbbbbb это будет очень небыстро

Yegor
22.11.2018
06:58:22
как-то у вас шибко быстро все получается и спорно

Tishka17
22.11.2018
06:58:32
Да там длина небось 10 символов

Yegor
22.11.2018
06:59:03
поиск строки будет начинаться с трех символов, дланна строк доходит до двух десятков легко

ща

Google
Aragaer
22.11.2018
07:00:43
вобщем я теперь тоже за find

а если регексп, то надо делать его чтобы без бэктрекинга

Yegor
22.11.2018
07:01:55


первую посчитал - 34 символа, но это не очень часто

Aragaer
22.11.2018
07:03:09
ваще я не понимаю, кто придумал такое дурное требование "хочу, чтобы можно было буквы не подряд и еще мусор игнорировать"

не напряжет же написать 320.101

более того, если ты будешь использовать такой "нечеткий" поиск, у тебя наоборот будет слишком много результатов

Владислав
22.11.2018
07:03:54
Он же вроде более умно работает

то есть при попытке найти abc в abb он сначала найдет первую a, потом первую b, потом не найдет c и подумает "чот не то, попробую найти другую b"

а потом все равно не найдет c и подумает "не, надо искать другую a"

и для случая aaaaaaaabbbbbbbb это будет очень небыстро

Aragaer
22.11.2018
07:04:11
нет, регексп примерно так работает

Владислав
22.11.2018
07:04:23
Хммм, ну ок

Aragaer
22.11.2018
07:04:29
он движется вперед по мере соответствия, но если нет соответствия, то откатывается назад и пробует с новой позиции

Yegor
22.11.2018
07:08:17
Основная задача этого поиска будет найти номер этой детали без ввода знаков препинания и подобных. Тоесть в основном юзер будет вбивать что-то на подобии 3201010201 а с базы будет выдергиваться ТСЦ-320.101.02.01 Ц Но может быть и такая запись ТСЦ-320.101.02-01 Ц

Tishka17
22.11.2018
07:08:18
На строке find('aaaaaabbbbbbbbbbbbbbbcccccccd', 'aaabbbbcde') разница в пользу регулярки 5%

find('aaaaaabbbbbbbbbbbbbbbcccccccd', 'abbbc')" - разница вообще не заметна и выполняет 10000 итераций за 0.1 секунду

Страница 7124 из 9768