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

Поиск:

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


Творец
****


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

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



С этого сайта
http://regexpstudio.com/
скачал библиотеку и exe`шник (RegExpr Test Program). 
Задача такая.
Есть текст:
Цитата

1-К. Квартира, 13 ЖМР, маг.Жигули, 5/5, 32/5.5, балкон 5.4, пластик, окна, пластик, трубы, хор. сост., т. 4771803, 807704702287, ЗООООу.е.

1-К.КВАРТИРА, 13 ЖМР, маг.Квартира, Жигули, 5/5, 32/5.5, балкон 5.4, пластик, окна, пластик, трубы, хор. сост., т. 49003, 81504702287, ЗООООу.е.

1-К.КВ, 13 ЖМР, маг.Квартира, Жигули, 5/5, 32/5.5, балкон 5.4, пластик, окна, пластик, трубы, хор. сост., т. 49003, 81504702287, ЗООООу.е.
1-К.Кв, 13 ЖМР, маг.Квартира, Жигули, 5/5, 32/5.5, балкон 5.4, пластик, окна, пластик, трубы, хор. сост., т. 49003, 81504702287, ЗООООу.е.

нужно из текста выцепить тип объекта недвижимости. Для этого нужно выцепить из текста конкретные слова. В данном случае: КВАРТИРА, Квартира, КВ, Кв.
(1 строка = 1 одъявлений)
Запускаю RegExpr Test Program (v.0947), копирую туда текст объявления, 
ввожу выражение:
Цитата
(Квартира)


И ещё, модификаторы нужно вводить так? (выражение)(ims) или по другому?

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


Творец
****


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

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



пока составил такую регулярку smile 
Цитата
(?i)(кв[, ][^а-я]|из.кв[^а-я ]|дом[^а-я ]|гостинка[^а-я ])

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


Творец
****


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

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



не могу допереть, как работать с окончаниями.

Есть в тексте 2 слова, которые нужно выцепить
ИЗОЛИРОВАННАЯ и ИЗОЛИРОВАННУЮ

эта регулярка: изолированн[ау]
ловит
ИЗОЛИРОВАННА или ИЗОЛИРОВАННУ
а как полностью слова найти?

Добавлено через 4 минуты и 49 секунд
 smile 
ураа
Цитата

изолированн(ая|ую)

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


Опытный
**


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

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



?((\d)(-)К\.КВ|К\.|КВАРТИРА)

Добавлено через 1 минуту и 18 секунд
ой, куда то пост исчез, в котором спрашивалось как вытащить квартиру...
PM MAIL WWW   Вверх
Akella
Дата 13.5.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Всё, я допёр, что перед точкой нужно ставить слеш \

Добавлено через 1 минуту и 26 секунд
зачем вопросительный знак?

Добавлено через 4 минуты и 15 секунд
Цитата(cemick @  13.5.2009,  16:00 Найти цитируемый пост)
?((\d)(-)К\.

количество комнат в отдельном месте нуна узнавать smile 
Просто из текста объявления нужно выцепить как можно больше интересной и нужной информации, как то: тип недвижимости, район, улицу, цену, телефоны, комнат, этажность, площади. Т.е. разбить объявление на части, шоб потом запихнуть всё красиво и аккуратно в базу. smile 

Пока потихоньку продвигаюсь. smile 
PM MAIL   Вверх
cemick
Дата 13.5.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Akella @  13.5.2009,  16:36 Найти цитируемый пост)
Добавлено через 1 минуту и 26 секунд
зачем вопросительный знак?

случайно там оказался

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


Творец
****


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

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



Цитата

1к. кв., в рне зд «Октябрь», ул. Готфейская, 1/1, площадь 20/10, 5/7, удобства во дворе, возможна пристройка. АН «Мир квартир».

1к. кв., Имаго, 11/14, 38, 2/19/8, моск., застекл. лодж., углов., рем., пл. трубы, счетч., во дворе садик, школа, 


1к. кв., Имаго, 7/9, 32, 5/17, 2/7, чешка, не углов., балкон, обмен на 2 комн. кв. в Ж. р

Красным выделены площади (общая, жилая, кухни), как будет выглядеть регулярка?
Хотелось бы выцепить три группы цифр, разделённых слешем: 20/10,5/7

такое: 11/14 или такое: 1/9 нужно пропускать

Это сообщение отредактировал(а) Akella - 14.5.2009, 17:20
PM MAIL   Вверх
Akella
Дата 15.5.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Теперь задача усложнилась. Требуется найти только такое: 1/5 или 11/14, т.е. этажность, этаж/этажность дома
Цитата

1к. кв., в рне зд «Октябрь», ул. Готфейская, 1/1, площадь 20/10,5/7, удобства во дворе, возможна пристройка. АН «Мир квартир».

1к. кв., Имаго, 11/14, 38, 2/19/8, моск., застекл. лодж., углов., рем., пл. трубы, счетч., во дворе садик, школа, 

1к. кв., Имаго, 7/9, 32, 5/17,2/7, чешка, не углов., балкон, обмен на 2 комн. кв. в Ж. р


Зелёным выделено то, что нужно найти, красным выделено то, что брать во внимание не требеутся.
PM MAIL   Вверх
cemick
Дата 15.5.2009, 09:22 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 \s(\d*/\d*),\s
PM MAIL WWW   Вверх
Akella
Дата 15.5.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



cemick, супер!
PM MAIL   Вверх
Akella
  Дата 17.5.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Тут выявилась проблема с поиском слов вначале предложения.
Цитата

ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., газ, лет.кухня, вода во дворе
ДОМ, Автовокзал, 3 комн.,60/32/10,5, котел, удва вдоме, тел., сост. отл., 


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

Вот регулярка:

(?ir)(уч-к|коттедж|([^а-Я]| )дом([^а-Я]| )|домик[^а-Я]|часть дома|полдома|пол дома|усадьб(а|у)|дач(а|у)|земля|зем. участок|зем.участок|земельный участок|участок зем.|участок земли|участок |ПОД ЗАСТРОЙКУ |ПОД ЗАСТРОЙКУ\.)

Эта регулярка не видит слово ДОМ вначале предложения.

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


Опытный
**


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

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



Не видит потому, что ([^а-Я]| ) предполагает наличие хотя бы одного символа..

 (?ir)(уч-к|коттедж|^([а-Я])*дом([а-Я])*|домик[^а-Я]|часть дома|полдома|пол дома|усадьб(а|у)|дач(а|у)|земля|зем. участок|зем.участок|земельный участок|участок зем.|участок земли|участок |ПОД ЗАСТРОЙКУ |ПОД ЗАСТРОЙКУ\.)
PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



А как "сказать" парсеру, что если в тексте встречается какое-нибудь слово или выражение, то не обрабатывать такой текст вообще? 
Допустим есть текст. В нём мы ищем слово дом. Но если в тексте есть слово квартира, то не нужно обрабатывать такой текст.

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


Опытный
**


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

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



скорее всего ни как
PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Тогда такой вопрос.
Цитата

ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., газ, лет.кухня, вода во дворе
  Дачи: Коротыч 45м.кв без внутренних работ, красный кирпич, лес, пруд

регулярка
(?ir)((^м\.кв)|[^а-Я\ ]кв[^а-Я]|кв,|изолированн(ая|ую)|гостинк(а|у)|комнат(у|а|ы)|из\. кв\.|из\.кв\.|из\.кв,|ГОСТ\.|комн. из|комн.из)

думает, что это квартира из-за выделенного красным цветом.
Как указать, что бы на 
м кв
м. кв
м. кв.
кв. м.
кв м
кв. м
кв м.

парсер не обращал внимание?
PM MAIL   Вверх
cemick
Дата 18.5.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тут наверно надо более точно задавать условие поиска квартир, например, мы знаем что перед "кв" не может быть чисел:
[,;\A]{1}[\s\D]*кв[^а-Я] (сочетание букв "кв" до которых может быть куча пробельных символов и один терминальный, либо начало строки)
вместо регулярного выражения:
[^а-Я\ ]кв[^а-Я]

для предложения ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., газ, лет.кухня, вода во дворе
PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



За то теперь такое:
Цитата
  Дом, 85 м*2, Хол. Гора, Лен. сторона, тел., вода, 6 сот., уч. ровн., 50 т.у.е. 

не может определить

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


Творец
****


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

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



Цитата(cemick @ 18.5.2009,  10:20)
Не видит потому, что ([^а-Я]| ) предполагает наличие хотя бы одного символа..

 (?ir)(уч-к|коттедж|^([а-Я])*дом([а-Я])*|домик[^а-Я]|часть дома|полдома|пол дома|усадьб(а|у)|дач(а|у)|земля|зем. участок|зем.участок|земельный участок|участок зем.|участок земли|участок |ПОД ЗАСТРОЙКУ |ПОД ЗАСТРОЙКУ\.)

 (?ir)(уч-к|коттедж|^([а-Я])*дом([а-Я])*|домик[^а-Я]|часть дома|полдома|пол дома|усадьб(а|у)|дач(а|у)|земля|зем. участок|зем.участок|земельный участок|участок зем.|участок земли|участок |ПОД ЗАСТРОЙКУ |ПОД ЗАСТРОЙКУ\.)
Нудно было  убрать то, что красным
PM MAIL   Вверх
cemick
Дата 18.5.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Akella @  18.5.2009,  15:31 Найти цитируемый пост)
не может определить

почему?

Цитата(Akella @  18.5.2009,  15:48 Найти цитируемый пост)
Нудно было  убрать то, что красным 


^ -- ??? В смысле убрать, это обозначает начало строки?

PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Ну не знаю, вот щас так определяет:
  Дом, 60 м2, газ, удобства, телефон, Люботин, экв. 26 т.д. 
  Дом, 85 м*2, Хол. Гора, Лен. сторона, тел., вода, 6 сот., уч. ровн., 50 т.у.е. 
Дом Дом, Дом

все 5 слов Дом
PM MAIL   Вверх
Akella
Дата 18.5.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Не могу найти в справке, как указать отрицание, несоотетствие.
Допустим предложение
  Дом ХТЗ Фрунзе флигель Зкомнаты, жилое состояние, вода во дворе, газ, канализация  по улице,  гараж,  3 сотки

регулярка: ((?ir)(\d(к|-к[^у]| из|из|/из| к\.| -к| к[ом]){1,6})|Зиз|Зк.)
определяем, что это квартира из-за выделенного красным

Как бы указать что-то вроде: ((?ir)(\d(к|-к[НЕу]| из|из|/из| к\.| -к| к[ом][НЕомнаты]){1,6})|Зиз|Зк.)

Добавлено через 4 минуты и 14 секунд
Цитата(Akella @  18.5.2009,  16:33 Найти цитируемый пост)
флигель Зкомнаты, 

там вообще буква "З"
PM MAIL   Вверх
Akella
Дата 18.5.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Вот хороший пример
  Полдома в Люботине, 2 комнаты, большая кухня, 
Вот регулярка: ((?ir)(\d(к |-к[^у]| из|из|/из| к\.| -к| к[ом]){1,6})|Зиз|Зк\.)
Из-за выделенного красным парсер думает, что это квартира, скорее всего из-за этого:  к[о (выделено зелёным)

Но вот это уже должно захавать, т.е. это изолированная квартира
В Люботине, 2 комн. из. кв. , большая кухня, отапливаемая веранда, газ, вода,

Что тут придумать?

Добавлено через 6 минут и 26 секунд
Цитата(Akella @  18.5.2009,  16:33 Найти цитируемый пост)
Не могу найти в справке, как указать отрицание, несоотетствие.

Цитата

Если первый символ перечня (сразу после "['') - "^'', то такой перечень совпадает с любым символом не перечисленным в перечне. 



Цитата(cemick @  18.5.2009,  15:52 Найти цитируемый пост)
^ -- ??? В смысле убрать, это обозначает начало строки?

смотря в каком месте этот символ ^

Добавлено через 8 минут и 35 секунд
Пока придумал так: ((?ir)(\d(к |-к[^у]| из|из|/из| к\.| -к| к(ом\.|омн\.|[^ комнаты])){1,6})|Зиз|Зк\.)
потом посмтотрим smile 

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


Опытный
**


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

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



Дак разве может быть, что бы перед сокращением обозначающим квартиру  сразу стояли стоит цифры????

Цитата(Akella @  18.5.2009,  16:33 Найти цитируемый пост)
Не могу найти в справке, как указать отрицание, несоотетствие.

Это похоже в них и нет. Можно только отрицание буквы. 

Цитата(Akella @  18.5.2009,  16:48 Найти цитируемый пост)
Пока придумал так: ((?ir)(\d(к |-к[^у]| из|из|/из| к\.| -к| к(ом\.|омн\.|[^ комнаты])){1,6})|Зиз|Зк\.)


[^ комнаты]  smile  --это означает, что не должна встретится не одна из перечисленных в этих скобках семи букв

Как вариант можно отдельно написать регулярное выражение, которым будешь проверять наличие упоминания о комнатах
PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(cemick @  18.5.2009,  17:49 Найти цитируемый пост)
разве может быть, что бы перед сокращением обозначающим квартиру  сразу стояли стоит цифры????

вот так часто начинаются объявления:
3-к. из.кв.
3-к. из. кв.
3-комн. из.кв.
3-ком. из. кв.
3-к. приват. кв.

Добавлено через 1 минуту и 7 секунд
Цитата(cemick @  18.5.2009,  17:49 Найти цитируемый пост)
[^ комнаты]  smile  --это означает, что не должна встретится не одна из перечисленных в этих скобках семи букв

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


Опытный
**


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

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



Цитата(Akella @  18.5.2009,  19:37 Найти цитируемый пост)
3-к. из.кв.
3-к. из. кв.
3-комн. из.кв.
3-ком. из. кв.
3-к. приват. кв.


Дак тут же дефис еще стоит, который можно учитывать для исключения ложных срабатываний

Добавлено через 1 минуту и 17 секунд
Цитата(Akella @  18.5.2009,  19:37 Найти цитируемый пост)
а если [^(комнаты)] 

Так вроде не позволяет синтаксис регулярных выражений

PM MAIL WWW   Вверх
Akella
Дата 18.5.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Ну вместо дефиса может быть проблел или ничего не может быть:
Цитата

3к. из.кв.
3к. из. кв.
3 комн. из.кв.
3 ком. из. кв.
3 к. приват. кв.

PM MAIL   Вверх
Akella
Дата 19.5.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Как сказать парсеру, что, например, слово: рядом не должно браться во внимание smile 

Это сообщение отредактировал(а) Akella - 19.5.2009, 10:26
PM MAIL   Вверх
Akella
Дата 19.5.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



cemick, тут в твоём примере небольшой казус:
вот твоя регулярка: (?ir)([,;\A][\s\D]{1}*кв[^а-Я]|изолированн(ая|ую)|гостинк(а|у)|комнат(у|а|ы)|из\. *кв\.|из\.*кв,|ГОСТ\.|комн. *из|комн. пр. *кв|З *из. *кв|3 из\? *кв.|3 *из. *кв)

Красным выделено то, что ты недавно посоветовал использовать, чтобы пропускать в тексте квадратные метры, например
Цитата

¦  5-к.  кв., Бавария, цокольный этаж, общ. 67 кв.м, нежилой фонд , подвал 67 кв.м, экв. 40000 д. Т. 751-67-72.

да, всё правильно, зелёный текст во внимание не берётся, теперь немного дёгтя smile 

вот текст, это всё квартиры, видно это по тому, что вначале текста
2-к. кв.
2-ком. кв.
5-к.  кв.
Цитата

¦ 2-к. кв., 607 м/р, Салтовка, под салон, стоматологию. 
¦  2-ком. кв., пр. Московский, в р-не пл. Руднева, 1/3, отдельный вход, 50/ 8, ремонт, брон. дверь, м/п окна, 
¦  5-к.  кв., Бавария, цокольный этаж, общ. 67 кв.м, нежилой фонд , подвал 67 кв.м, 
¦ Вы хотите преуспеть в бизнесе? Звоните! 3-кв., м. "М. Жукова", 1/5' "сталинка", Н = 3 м, суперпланировка, шикарное расположение-дома. 

но из-за выделенного красным куска регулярки... такие объявления не учитываются, а должны, что ещё можно придумать :(
PM MAIL   Вверх
cemick
Дата 20.5.2009, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну смотря что надо  smile 
Можно и просто добавить учет еще и точки  smile  [,\.;\A]{1}[\s\D]*кв[^а-Я]
PM MAIL WWW   Вверх
Akella
Дата 20.5.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(cemick @  20.5.2009,  09:00 Найти цитируемый пост)
Ну смотря что надо  smile 

надо и так и так, спасибо, глянем
PM MAIL   Вверх
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   Вверх
Akella
Дата 20.10.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Есть строка
Цитата

<span>предыдущая</span></a>&nbsp;&nbsp;<a href="/real-estate/apartments-sale/page1/">1</a>&nbsp;|&nbsp;<strong class="drk">2</strong>&nbsp;|&nbsp;<a href="/real-estate/apartments-sale/page3/">3</a>&nbsp;|&nbsp;<a href="/real-estate/apartments-sale/page4/">4</a>&nbsp;&nbsp;<a href="/real-estate/apartments-sale/page3/" class="nxt-page more"><span>следующая</span>


на сайте это выглядит так:
user posted image

Нужно вычислить адрес следующей страницы, в цитате выделено красным.
Т.к. подстрок очень похожих может быть несколько, то такая регулярка (?i)(</a>&nbsp;&nbsp;<a href=".*?>Следующая) даёт неверный результат. Заставить DiRegEx искать с конца строки с помощью символа - $ так и не смог.
Что посоветуете?

Добавлено через 5 минут и 35 секунд
Добавлю, что текст, выделенный красным, может быть и другой. Зависит от рубрики каталога, например вот: 
/cars/passenger/used/page2/
PM MAIL   Вверх
evorios
Дата 22.10.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



твоё первое сообщение по теме 13.5.2009, не уж то ещё не разобрался?

"([^"]+)" class="nxt-page more"><span>следующая
PM MAIL   Вверх
Akella
Дата 22.10.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



evorios, не помню, наверное разобрался же.
С посленим тоже разобрался.  Парсил в два этапа.
PM MAIL   Вверх
Akella
Дата 12.7.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Требуется найти ссылку на следующую страницу на сайте. Т.е. на сайтах с объявлениями, как правило внизу или вверху список страниц есть. Вот мне нужно пройтись по всем.

Красным я выделил то, что нужно искать.
Цитата

<p class="clear Paging">Страницы: <span class="curent">1</span> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=1">2</a> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=2">3</a> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=3">4</a> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=4">5</a> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=5">6</a> <span>…</span> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=19">20</a> <span>предыдущая</span> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=1" id="nextLink" title="Ctrl + стрелка вправо">следующая</a></p>     


Из-за того, что на сайте есть ещё и поиск (параметры поиска), то ссылки на след. страницу могут выглядеть немного по-разному, т.е. в ссылку ещё и параметры попадают.
Но в конце есть параметр p=1, который означает номер страницы, начиная с нуля.

/catalog/13?r=10501&s=1&t=1&o=0&p=1
/catalog/13?r=10501&s=1&t=1&o=0&p=2
/catalog/13?q=&t=1&s=1&buy=0&o=0&r=10000&r1=10500&cur=0&pf=0&pt=0&p=5

Т.о. мне нужно получить всю ссылку, а не только последний параметр.
Основная проблема в том, что в этом блоке есть куча похожих ссылок.

Добавлено через 7 минут и 24 секунды
У меня получается 2 выражения: (?i)предыдущая(.*?)следующая и (?i)"(.*?)"
Т.е. сначала получаю: предыдущая</span> <a href="/catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=1" id="nextLink" title="Ctrl + стрелка вправо">следующая
а потом из полученного уже получаю, то что нужно: /catalog/13?r=10501&amp;s=1&amp;t=3&amp;o=0&p=1
А можно как-то выдрать одним выражением?

Исп. DIRegeEx

Это сообщение отредактировал(а) Akella - 12.7.2010, 11:06
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle

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

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

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

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

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

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

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


 




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


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

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