![]() |
Модераторы: THandle, bems |
![]() ![]() ![]() |
|
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Усложняем задачу.
![]() Есть таблица. В таблице есть поле текстовое, в котором хранятся названия районов города. Типа, вокзал, центр, ленинский, комсомольский, московский. Так вот... как бы наиболее оптимально узнать из текста название района? Вообще, стоит ли прибегать к помощи регулярок. Может динамически построить регулярку вида: (район1|район2|район3|район4|район5|районN) Ну в небольших городах мало районов. Но... может быть, например, около 500, а то и все 1500 районов. Что посоветуете? Я пока склоняюсь к построению динамической регулярки. |
|||
|
||||
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
Наверно динамически, районов все таки сильно ограниченное количество и это будет самый надежный способ.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
В доке не нашёл, автор молчит, как рыба об лёд. Может кто знает ограничение на длину регулярки, если таковое имеется?
|
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 4 Всего: 89 |
Я может не в тему влезу, но может быть не стоит использовать здесь регулярные выражения и написать проверку вручную? Ничего особо сложного тут нет - быстрее руками сделать, чем подбирать рег. выр.
Наверное, оптимально будет использовать рег. выр. для проверок частей и общую логику для всего выражения. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
CodeMonkey, не понял, покажи на пример, если не тяжело
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Хуже всего, что в названиях районов могут встречаться служебные символы, как минимум точка. StringReplace, конечно же спасёт гиганта мысли, но от пользователя
![]() Добавлено @ 12:58 Нет. строить регулярку из сотни районов не годится. Произвдительности вообще нет. Программа, можно сказать, не работает. Добавлено через 12 минут и 2 секунды
как вам регулярка ![]() ![]() Это сообщение отредактировал(а) Akella - 21.5.2009, 12:58 |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 4 Всего: 89 |
Акелла, я про то, что не удасться уложить эти правила в рег. выражение. А даже, если удасться, то решение будет настолько страшным, что его нельзя будет ни модифицировать, ни отлаживать. Этакий write-only language.
Лучше сделать это обычным кодом. Ну что-то типа синтаксического анализатора. Разбить строку на части (зяпятые?), попытаться выяснить смысл каждой части. Да, он может зависеть от смысла предыдущих/последующих частей, но тем не менее это можно сделать. Сами рег. выр. можно использовать при разбиении на части или при анализе каких-то частей. Это сообщение отредактировал(а) CodeMonkey - 21.5.2009, 13:48 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
все правильно, товарищ из блога решил выполнить с помощью регулярных выражений то, что уже относится семантическому анализу, к чему они не приспособлены. В результате он сделал правильно, фактически совместил регулярное выражение ((\d{3}).(\d{3}).(\d{3}).(\d{3})) выполняющее синтаксический анализ входной строки, и семантический анализ полученных токенов. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Сейчас пытаюсь наиболее правильно и оптимально находить цену. К сожалению цена и телефон могут быть схожи.
Цены выделил красным. Может перед парсингом преобразовывать тыс. долл., т.д. к нулям? Добавлено @ 13:49 Для начала. (?ir)(экв\. *\d{1,}( *тыс\.)|экв\. *\d{1,}( *т\.)) Это сообщение отредактировал(а) Akella - 27.5.2009, 13:51 |
|||
|
||||
FireIce |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.10.2009 Где: Красноярск Репутация: нет Всего: нет |
Кто мне подскажет как работает функция frac?
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
FireIce, frac - это из регулярок что-то??
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Добро пожаловать в форум группы "Delphi". В разделе разрешается:
Строго запрещено:
Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Форум группы: delphi | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |