Модераторы: THandle, bems

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Примеры регулярных выражений 
:(
    Опции темы
Akella
Дата 20.5.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Усложняем задачу. smile 

Есть таблица. В таблице есть поле текстовое, в котором хранятся названия районов города. Типа, вокзал, центр, ленинский, комсомольский, московский.

Так вот... как бы наиболее оптимально узнать из текста название района? Вообще, стоит ли прибегать к помощи регулярок. Может динамически построить регулярку вида:
(район1|район2|район3|район4|район5|районN)
Ну в небольших городах мало районов. Но... может быть, например, около 500, а то и все 1500 районов.
Что посоветуете? Я пока склоняюсь к построению динамической регулярки.
PM MAIL   Вверх
cemick
Дата 21.5.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Наверно динамически, районов все таки сильно ограниченное количество и это будет самый надежный способ. 
PM MAIL WWW   Вверх
Akella
Дата 21.5.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



В доке не нашёл, автор молчит, как рыба об лёд. Может кто знает ограничение на длину регулярки, если таковое имеется?
PM MAIL   Вверх
CodeMonkey
Дата 21.5.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 4
Всего: 89



Я может не в тему влезу, но может быть не стоит использовать здесь регулярные выражения и написать проверку вручную? Ничего особо сложного тут нет - быстрее руками сделать, чем подбирать рег. выр.
Наверное, оптимально будет использовать рег. выр. для проверок частей и общую логику для всего выражения.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 21.5.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



CodeMonkey, не понял, покажи на пример, если не тяжело
PM MAIL   Вверх
Akella
Дата 21.5.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Хуже всего, что в названиях районов могут встречаться служебные символы, как минимум точка. StringReplace, конечно же спасёт гиганта мысли, но от пользователя   smile  можно всего ожидать

Добавлено @ 12:58
Нет. строить регулярку из сотни районов не годится. Произвдительности вообще нет. Программа, можно сказать, не работает.

Добавлено через 12 минут и 2 секунды
Код
'(?ir)(Районы||Прочие|Город|Ватутина|2 Восточный|Войновка|Дом Обороны|2 Заречный|3 Заречный|Заречный|МЖК|1мкр|6мкр|Московский|Тарманы|Тюменский|1 Тюменский|Центр|Восточный|2 Заречный|Лесобаза|3МКР|Московский тракт|Московский дворик|1Тюменский|3Тюменский|Дом печати|ЦЕНТР,  Алекс\.сад|Червишевский тракт|Южный|Воронинские горки|груз|МОСКОВСКИЙ ТР\.|ТЮМЕНСКИЙ 1|Тобольск|Новый Уренгой|3Заречный|Восточный мкр|4 МКР|5Мкр|Д\.Печати|р-нБерезняки|Суходолье|Решетниково|17км Велиж\.тр\.|17кмВел\.тр\.|Тобольс\.тр\.|прочие|Москов\.тр\.16км|Кулакова|Рощино|Червиш\.тр\.|Чаплина|Д\.Обороны|Европа|Богандинка|Большие Акияры|Боровский|Винзили|Голышмановский р-н|Зайкова|Зайково|Зубарево|Перевалово|Велиж\.тр\.|ММС/Казарово|ММС|Ирбит\.тр, 29км|Онохино|Цимлянское|22-й км Сал\.тр\.|Сараир\.тр\.|Салаир\.тр-т 12 км|30км Велиж\.тр\.|18км Велиж\.тр\.|Тобольский тр\.|Труфаново|за Червишево|Червишево|Яр|Ялуторов\.тр\.|Восточный 2|Моск\.тр\.|1-йТюм\.мкр\.|Боровое|2-й Заречный|Ватутина|Р-нАвтограда|2-й км Старот\.тр\.|Южный мкр\.|1 МКР Тюменск\.|3 Тюменский|Газпром|Москов\.тр\.|2Южный|Ветеранов труда|р-н Водоканала|ДОК|Старотобольский|Пригород|Пермь|Алексеевка|Бардымский|Березовский|Большесосновский|Верещагинский|Гайнский|Горнозаводский|Еловский|Ильинский|Карагайский|Кишертский|Косинский|Кочевский|Красновишерский|Кудымкарский|Куединский|Кунгурский|Нытвенский|Октябрьский|Ординский|Осинский|Оханский|Очерский|Пермский|Сивинский|Соликамский|Суксунский|Уинский|Усольский|Частинский|Чердынский|Чернушинский|Юрлинский|Юсьвинский|Салтовка|Клочковская|П\. Поле|пр-т Гагарина|р-н Аэропорта|Хол\. Гора)'


как вам регулярка  smile  smile 

Это сообщение отредактировал(а) Akella - 21.5.2009, 12:58
PM MAIL   Вверх
CodeMonkey
Дата 21.5.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 4
Всего: 89



Акелла, я про то, что не удасться уложить эти правила в рег. выражение. А даже, если удасться, то решение будет настолько страшным, что его нельзя будет ни модифицировать, ни отлаживать. Этакий write-only language.

Лучше сделать это обычным кодом. Ну что-то типа синтаксического анализатора. Разбить строку на части (зяпятые?), попытаться выяснить смысл каждой части. Да, он может зависеть от смысла предыдущих/последующих частей, но тем не менее это можно сделать.

Сами рег. выр. можно использовать при разбиении на части или при анализе каких-то частей.

Это сообщение отредактировал(а) CodeMonkey - 21.5.2009, 13:48


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 21.5.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Цитата(Akella @  21.5.2009,  12:49 Найти цитируемый пост)
(Районы||

я нашёл ашипку  smile , вот почему загинается

Это сообщение отредактировал(а) Akella - 21.5.2009, 14:16
PM MAIL   Вверх
cemick
Дата 21.5.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Цитата(CodeMonkey @ 21.5.2009,  12:21)
Я может не в тему влезу, но может быть не стоит использовать здесь регулярные выражения и написать проверку вручную? Ничего особо сложного тут нет - быстрее руками сделать, чем подбирать рег. выр.
Наверное, оптимально будет использовать рег. выр. для проверок частей и общую логику для всего выражения.

все правильно, товарищ из блога решил выполнить с помощью регулярных выражений то, что уже относится семантическому анализу, к чему они не приспособлены.  В результате он сделал правильно, фактически совместил регулярное выражение ((\d{3}).(\d{3}).(\d{3}).(\d{3})) выполняющее синтаксический анализ входной строки, и семантический анализ полученных токенов.  
PM MAIL WWW   Вверх
Akella
Дата 21.5.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



PM MAIL   Вверх
cemick
Дата 21.5.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Цитата(Akella @  21.5.2009,  16:45 Найти цитируемый пост)
Ахо — Корасик 

RegExpr его реализует?? 
Ну чисто субъективно он работает быстрее, чем если бы в ручную выполнять линейный поиск
PM MAIL WWW   Вверх
Akella
Дата 21.5.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Цитата(cemick @  21.5.2009,  17:18 Найти цитируемый пост)
RegExpr его реализует?? 

Без понятия. Этот алгоритм мне подсказали на sql.ru
PM MAIL   Вверх
Akella
Дата 27.5.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Сейчас пытаюсь наиболее правильно и оптимально находить цену. К сожалению цена и телефон могут быть схожи.

Цитата

  2 эт. большой аккуратный дом, все уд-ва централиз., гараж на 2 машины, с телефоном, дом 2005 т.п., экв. 23 тыс. долл. торг. 8-066-731-555-57 Наталия   Николаевна
2 эт. дом в Ст. Салтове, со всеми удобствами, газ, АГВ, счетчик, гараж на 2 машины, уч. 1 6(cotqk, рядом лес, водохранилище. 40 т.у.е. 700-14-92, 8-05Х)-785-26-62, Олеся.____________________
  Дом 175м2 (2 эт.), гараж, уч-к 6 сот., 2004 г., ремонт, 6 комн..автон. отоплен., центр, канализ., экв. 180 тыс. долл. 759-55 -12
  2 эт., 120 м2, кап. рем. 2000 г.п., надворные постройки, с телефоном, все уд-ва, гараж, земля 15 сот., пос.Высокий, срочно очень, экв. 65 тыс. долл. торг. 712-45-91,    8-096-778-77-57,    Наталия Никол.
  Шикарный 2 эт. дом 240 м2, со всеми удобствами, гараж, погреб, 21 сотка, 17 км от Харькова, экв. 80 т.д. 26-15-83, 8-067-700-32-10.     '
  3 из. кв. "чешка", 10 мин. от м. "Х.Гора", 38  т.у.е.   700-50-92,   8-095-547-40-28, Леша
  3 из. кв. "чешка", Салтовское шоссе, 2 бал к., застеклены, м/пласт. окна, 37500 у.е. торг. 76-184-66, 745-13-16.
  Зиз. кв. (перепл. из 4из.кв.)520м/р,3/ 9, 70/52/7, кухня-студия, кап. рем., имп. плитка, сД, охрана, экв. 56 тыс. долл. 759-78-13
тлф. вымышленные 

Цены выделил красным. Может перед парсингом преобразовывать тыс. долл., т.д. к нулям?

Добавлено @ 13:49
Для начала.
(?ir)(экв\. *\d{1,}( *тыс\.)|экв\. *\d{1,}( *т\.))

Это сообщение отредактировал(а) Akella - 27.5.2009, 13:51
PM MAIL   Вверх
FireIce
Дата 12.10.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.10.2009
Где: Красноярск

Репутация: нет
Всего: нет



Кто мне подскажет как работает функция frac?
PM MAIL   Вверх
Akella
Дата 12.10.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



FireIce, frac - это из регулярок что-то??
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle

Добро пожаловать в форум группы "Delphi".

В разделе разрешается:

  • Флудить (в приемлемых величинах)
  • Обсуждать модерирование данного раздела (но не его модератора)
  • Добавлять свои правила если они не противоречат существующим
  • Делать наезды на пешеходов***

Строго запрещено:

  • Размещать рекламу
  • Совершать оскорбления личностей
  • Материться
  • *** Пешеходами не являются (ко)модераторы, админы, участники клуба.

Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Форум группы: delphi | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.