
Александр
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

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

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

Aragaer
22.11.2018
06:26:13

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

Yegor
22.11.2018
06:27:34

Tishka17
22.11.2018
06:29:09

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

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
А "ус"?

Khachatur
22.11.2018
06:36:08
У тебя то есть в базе конечное число объектов, по которым ты хочешь проматчиться?

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
Ага

Tishka17
22.11.2018
06:44:21
Вообще, главный вопрос сколько записей

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
И зачем там вопрос?

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

Cykooz
22.11.2018
06:53:59

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

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

Cykooz
22.11.2018
06:55:34

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 секунду