Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражение, найти все совпадения цифр 
:(
    Опции темы
Akella
  Дата 19.5.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Есть текст, в котором встречаются наборы цифр в разных форматах, вот наиболее часто используемые:
    200-711-25
    243-12-3
    1999-05-14
    1234567
    1-234567
    12 34 567
    1 500 000
    1-(123)-456-78-90
    755 58 69
    -------
    15000
    1 500 000 у.е.
    1 500 000 уе

Есть выражение: (\d[\d? -\-]{7,})
довести до ума не получается.
Какие условия? По идее выражение должно видеть только номера телефонов, как видно из списка, то две последние строки (с у.е. и уе) не есть номерами телефонов, вот из списка должно попасть в результаты всё, кроме последних строчек после -------
Буду признателен за помощь smile .

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


Творец
****


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

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



вот ещё подсказали:
(\d[\d\(\)\- ]*\d)
Цитата

словами оно звучит так:
дай мне все строки, в которых первый и последний символ цифра, а внутри любое кол-во цифр, прбелов, тире и скобок


но проблема в том, что наборы типа 777 или 123 или 1254 тоже попадают, т.е. нужно ещё контролировать количество цифр, т.е. найти все наборы, где цифр, например от 7 до 11
PM MAIL   Вверх
dumb
Дата 19.5.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Код
^\s*(\d[\d\(\)\- ]{5,15}\d)\s*$

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


Творец
****


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

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



вот ,например текст объявления:
Цитата

ДОМ, Автовокзал, ЗК,45/35, ч/у, хор.сост,шл/бл Т.560741, 499583,80984438809.


пока что самым нормальным шаблоном является этот: (\d[\d- ]{5,})
PM MAIL   Вверх
dumb
Дата 19.5.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



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


Творец
****


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

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



dumb, 
Цитата

Внимание регулярное выражение содержит ошибки:
preg_match_all(): No ending delimiter '^' found


http://regexpr.ru
PM MAIL   Вверх
dumb
Дата 19.5.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



без признаков начала-конца строки и whitespace'ов:
Код
(\d[\d\(\)\- ]{5,15}\d)

ты лучше чуть больше примеров текста выложи. smile
PM MAIL   Вверх
kemiisto
Дата 19.5.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Akella, дайте лучше точное описание, что считается в этой задачке телефонным номером. Тогда запросто напишете выражение. Решать задачу фактически без формулировки...  smile 

Да и ещё, должен (по-моему) быть какой-то чёткий стандарт на телефонные номера: разделитель - либо пробел, либо тире; скобки - либо разрешены, либо нет. Тогда будет проше разобрать документ. Или документ уже имеется и там такая котовасия?  

Это сообщение отредактировал(а) kemiisto - 19.5.2008, 12:30


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


Творец
****


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

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



Вот то, что прога сканирует, цветом выделены номера телефонов, которые должны попасть в совпадения
Цитата

15ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., газ, лет.кухня, 12000уе, вода во дворе Т.560-741
111ДОМ, Автовокзал, 3 комн.,60/32/10,5, котел, удва вдоме, тел., сост. отл., гараж с мансардой, учк5,7сот.,т. , 80978247435, \ллллл/. тазЫаЬ.со
104ДОМ, Автовокзал, ЗК,45/35, ч/у, хор.сост,шл/бл Т.560741, 499583,80984438809.
103ДОМ, Автовокзал, 4К, 60/40/8, все удва, газ, шл.бл, пласт.окна Т.499610, 560741.80974961349.
102ДОМ, Автовокзал, ул. Торговая, 10 соток, пло¬щадь 80/60/12, газ, вода, шлакоблок+кирпич. 7 500 000 уе., Т. 57-62-00,49-01-30,42-77-84.
102ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., газ, 150000 уе., лет.кухня, вода во дворе Т.56 07 41
102ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., 15 000 у.е., газ, лет.кухня, вода во дворе Т.8-(070)-255-78-89
101ДОМ, Автовокзал, 2К, 50кв. м., хор.сост., 15000 уе., газ, лет.кухня, вода во дворе Т.560741


Добавлено @ 12:49
Цитата(kemiisto @  19.5.2008,  12:24 Найти цитируемый пост)
что считается в этой задачке телефонным номером. 

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

Добавлено @ 12:54
Автор к сожалению не даёт возможности использовать пре и пост условия
http://regexpstudio.com/RU/

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


Творец
****


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

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



как видно, запятая является разделителем телефонов, если их несколько, может быть и точка с запятой

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

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

Добавлено через 2 минуты и 36 секунд
Плохо, что в дельфи нет встроенных регулярок, как это в MSVS сделано, при чём там сделано, как мне сказали "по-уму".
PM MAIL   Вверх
dumb
Дата 19.5.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



эм... может как-нибудь так?
Код
(\d[\d\(\)\- ]{4,15}\d)( [^$у]|[.,;\n\r])

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


Творец
****


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

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



нет, это слишком сложное:
 Внимание регулярное выражение содержит ошибки:
preg_match_all(): Unknown modifier '('
PM MAIL   Вверх
dumb
Дата 19.5.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



ты это.. когда проверяешь на regexpr.ru, обрамляй регулярку в слэши-то: /(блабла)(блаблабла)/

Добавлено через 3 минуты и 14 секунд
и кстати: применимо к регуляркам выражение "слишком сложное" практически не употребимо... smile ибо в жизни они почти всегда получаются "сложными".
PM MAIL   Вверх
kemiisto
Дата 19.5.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Akella, можеть быть Вас устроит поиск всей строки телефонов, а не каждого в отдельности? Если да, то можно так:
Код

Т\. ?(((\d+)\)?( |-)?\(?)+(\d+))((,|.)? ?((\d+)( |-)?)+(\d+))+


Проект приаттачил. Вроде как работает. За исключением очевидных ошибок/опечаток (см. например, вторую строку т. , 80978247435). Такие опечатки не имеет смысла обрабатывать, т.к их может быть бесконечно много.

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  regexp.zip 66,50 Kb


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


Творец
****


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

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



Цитата(kemiisto @  19.5.2008,  17:31 Найти цитируемый пост)
можеть быть Вас устроит 

можно меня на ТЫ, я не такой уже и старый  smile

Добавлено через 50 секунд
Цитата(kemiisto @  19.5.2008,  17:31 Найти цитируемый пост)
всей строки телефонов, а не каждого в отдельности?

нет, именно по отдельности, т.к. я потом по базе телефоны пробиваю

Добавлено через 3 минуты и 18 секунд
Цитата(kemiisto @  19.5.2008,  17:31 Найти цитируемый пост)
см. например, вторую строку т. , 80978247435). Такие опечатки не имеет смысла обрабатывать, т.к их может быть бесконечно много. 

здесь нужно выцепить 80978247435, какая же  здесь очепятка?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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