Название: Поиск строк по шаблону Отправлено: Авварон от Октябрь 19, 2017, 20:24 Ну вот и моя очередь создавать мозголомные темы.
Есть текст (html или plain), в котором находятся строчки вида "блабла: число (блаблабла число) фубар: число фубаз: время базфу" Порядок строчек известен, но некоторые могут отсутствовать. Каждой строчке, допустим, сопоставлен ключ (или два ключа) Что нужно - выцепить значения чисел и времени по ключам, т.е. для каждой строки понять что это за строка и вытащить из неё значения, в ней находящиеся. Тупое решение - сделать кучу регекспов и матчить строки. Сложность у него N*N, где N - возможное кол-во строк. Можно ли лучше/проще? Название: Re: Поиск строк по шаблону Отправлено: Old от Октябрь 19, 2017, 20:40 Дааааа. Давненько мы финдреплейсов не писали, вон наш главный финдреплейшик как заскучал. :)
Не очень понятна задача. Нужно находить строки, которые начинаются на key: value и сохранять эти пары в какой-то ассоциативный контейнер? Или ключи известны? И решения с бустом предлагать? :) Название: Re: Поиск строк по шаблону Отправлено: Авварон от Октябрь 19, 2017, 22:07 Да, ключи известны. Собственно, первое, что я сделал, это просто порезал строки через ": " и брал ключ-значение (возможно, значение пустое).
Но всю малину попортила строка "key: value (key: value)". В целом, её можно тупо порезать по "(", но верный ли такой подход? Название: Re: Поиск строк по шаблону Отправлено: __Heaven__ от Октябрь 20, 2017, 09:00 spirit не?
Название: Re: Поиск строк по шаблону Отправлено: Old от Октябрь 20, 2017, 09:08 Но всю малину попортила строка "key: value (key: value)". В целом, её можно тупо порезать по "(", но верный ли такой подход? Если это единственное исключение, то я бы обрабатывал его отдельно и резал бы по '('.Но если завтра возможно появление новых исключений, например: "key: value /key: value/" или "key: value [key: value] [key: value]" то по мне лучше сделать некий механизм добавления обработчиков таких исключений. Название: Re: Поиск строк по шаблону Отправлено: Igors от Октябрь 20, 2017, 13:12 Но всю малину попортила строка "key: value (key: value)". В целом, её можно тупо порезать по "(", но верный ли такой подход? Ну если по-быстрому, то почему бы и нет. Если более капитально, то все сводится к тому же: нужно бить строку на токены (QStringRef, в общем случае итератор), напр для строки выше список токеновКод: key Другой путь - освоение "моцных технологий", если знаете как записать какую-нибудь дустовскую сабру-кадабру, то выйдет покороче |