Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Форум группы: delphi > Примеры регулярных выражений


Автор: Akella 13.5.2009, 08:53
С этого сайта
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, 14:48
пока составил такую регулярку smile 
Цитата
(?i)(кв[, ][^а-я]|из.кв[^а-я ]|дом[^а-я ]|гостинка[^а-я ])

Автор: Akella 13.5.2009, 15:15
не могу допереть, как работать с окончаниями.

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

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

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

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

Автор: cemick 13.5.2009, 16:00
?((\d)(-)К\.КВ|К\.|КВАРТИРА)

Добавлено через 1 минуту и 18 секунд
ой, куда то пост исчез, в котором спрашивалось как вытащить квартиру...

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

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

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

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

Пока потихоньку продвигаюсь. smile 

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

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

Автор: Akella 14.5.2009, 17:08
Цитата

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 15.5.2009, 09:08
Теперь задача усложнилась. Требуется найти только такое: 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 комн. кв. в Ж. р


Зелёным выделено то, что нужно найти, красным выделено то, что брать во внимание не требеутся.

Автор: cemick 15.5.2009, 09:22
 \s(\d*/\d*),\s

Автор: Akella 15.5.2009, 10:41
cemick, супер!

Автор: Akella 17.5.2009, 20:52
Тут выявилась проблема с поиском слов вначале предложения.
Цитата

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


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

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

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

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

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

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

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

Автор: cemick 18.5.2009, 13:03
скорее всего ни как

Автор: Akella 18.5.2009, 13:26
Тогда такой вопрос.
Цитата

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

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

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

парсер не обращал внимание?

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

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

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

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

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

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

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

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

почему?

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


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

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

все 5 слов Дом

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

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

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

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

там вообще буква "З"

Автор: Akella 18.5.2009, 16:48
Вот хороший пример
  Полдома в Люботине, 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 

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

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

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

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


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

Как вариант можно отдельно написать регулярное выражение, которым будешь проверять наличие упоминания о комнатах

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

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

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

а если [^(комнаты)]

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


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

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

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

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

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

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

Автор: Akella 19.5.2009, 17:06
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 м, суперпланировка, шикарное расположение-дома. 

но из-за выделенного красным куска регулярки... такие объявления не учитываются, а должны, что ещё можно придумать :(

Автор: cemick 20.5.2009, 09:00
Ну смотря что надо  smile 
Можно и просто добавить учет еще и точки  smile  [,\.;\A]{1}[\s\D]*кв[^а-Я]

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

надо и так и так, спасибо, глянем

Автор: Akella 20.5.2009, 22:21
Усложняем задачу. smile 

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

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

Автор: cemick 21.5.2009, 09:48
Наверно динамически, районов все таки сильно ограниченное количество и это будет самый надежный способ. 

Автор: Akella 21.5.2009, 10:36
В доке не нашёл, автор молчит, как рыба об лёд. Может кто знает ограничение на длину регулярки, если таковое имеется?

Автор: CodeMonkey 21.5.2009, 12:21
Я может не в тему влезу, но может быть http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx и написать проверку вручную? Ничего особо сложного тут нет - быстрее руками сделать, чем подбирать рег. выр.
Наверное, оптимально будет использовать рег. выр. для проверок частей и общую логику для всего выражения.

Автор: Akella 21.5.2009, 12:32
CodeMonkey, не понял, покажи на пример, если не тяжело

Автор: Akella 21.5.2009, 12:49
Хуже всего, что в названиях районов могут встречаться служебные символы, как минимум точка. 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 

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

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

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

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

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

Автор: cemick 21.5.2009, 16:29
Цитата(CodeMonkey @ 21.5.2009,  12:21)
Я может не в тему влезу, но может быть http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx и написать проверку вручную? Ничего особо сложного тут нет - быстрее руками сделать, чем подбирать рег. выр.
Наверное, оптимально будет использовать рег. выр. для проверок частей и общую логику для всего выражения.

все правильно, товарищ из блога решил выполнить с помощью регулярных выражений то, что уже относится семантическому анализу, к чему они не приспособлены.  В результате он сделал правильно, фактически совместил регулярное выражение ((\d{3}).(\d{3}).(\d{3}).(\d{3})) выполняющее синтаксический анализ входной строки, и семантический анализ полученных токенов.  

Автор: Akella 21.5.2009, 16:45
http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%90%D1%85%D0%BE_%E2%80%94_%D0%9A%D0%BE%D1%80%D0%B0%D1%81%D0%B8%D0%BA

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

RegExpr его реализует?? 
Ну чисто субъективно он работает быстрее, чем если бы в ручную выполнять линейный поиск

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

Без понятия. Этот алгоритм мне подсказали на sql.ru

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

Цитата

  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,}( *т\.))

Автор: FireIce 12.10.2009, 10:35
Кто мне подскажет как работает функция frac?

Автор: Akella 12.10.2009, 22:41
FireIce, frac - это из регулярок что-то??

Автор: Akella 20.10.2009, 11:47
Есть строка
Цитата

<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/

Автор: evorios 22.10.2009, 16:37
твоё первое сообщение по теме 13.5.2009, не уж то ещё не разобрался?

"([^"]+)" class="nxt-page more"><span>следующая

Автор: Akella 22.10.2009, 18:23
evorios, не помню, наверное разобрался же.
С посленим тоже разобрался.  Парсил в два этапа.

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

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

<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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)