![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Есть текст, в котором встречаются наборы цифр в разных форматах, вот наиболее часто используемые:
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,}) довести до ума не получается. Какие условия? По идее выражение должно видеть только номера телефонов, как видно из списка, то две последние строки (с у.е. и уе) не есть номерами телефонов, вот из списка должно попасть в результаты всё, кроме последних строчек после ------- Буду признателен за помощь Это сообщение отредактировал(а) Akella - 19.5.2008, 09:19 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
вот ещё подсказали:
(\d[\d\(\)\- ]*\d)
но проблема в том, что наборы типа 777 или 123 или 1254 тоже попадают, т.е. нужно ещё контролировать количество цифр, т.е. найти все наборы, где цифр, например от 7 до 11 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
вот ,например текст объявления:
пока что самым нормальным шаблоном является этот: (\d[\d- ]{5,}) |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
хех, этот пример разительно отличается от того, что ты привел в первом посте. для составления регэкспа нужно как можно больше "случаев" текста.
твой регэксп совсем не имеет условия окончания. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
dumb,
http://regexpr.ru |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
без признаков начала-конца строки и whitespace'ов:
ты лучше чуть больше примеров текста выложи. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 16 Всего: 160 |
Akella, дайте лучше точное описание, что считается в этой задачке телефонным номером. Тогда запросто напишете выражение. Решать задачу фактически без формулировки...
Да и ещё, должен (по-моему) быть какой-то чёткий стандарт на телефонные номера: разделитель - либо пробел, либо тире; скобки - либо разрешены, либо нет. Тогда будет проше разобрать документ. Или документ уже имеется и там такая котовасия? Это сообщение отредактировал(а) kemiisto - 19.5.2008, 12:30 -------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Вот то, что прога сканирует, цветом выделены номера телефонов, которые должны попасть в совпадения
Добавлено @ 12:49 так вот нужно составить несколько выражений с описанием, чтобы пользователь перед старом мог выбрать, т.к. в разных городах, да что там в городах, в разных организациях по разному пишут телефоны, где с тире, где только цифры, где тире со скобками, где пробел Добавлено @ 12:54 Автор к сожалению не даёт возможности использовать пре и пост условия http://regexpstudio.com/RU/ Это сообщение отредактировал(а) Akella - 19.5.2008, 13:04 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
как видно, запятая является разделителем телефонов, если их несколько, может быть и точка с запятой
Добавлено через 45 секунд Само собой, что идеального шаблона выражения не составишь, хотелось бы поиметь несколько более или менее нормальных Добавлено через 1 минуту и 49 секунд Как видно из примера, в качестве разделителя цифр в телефоне может быть пробел, скобки, тире, а может быть вообще без разделителей Добавлено через 2 минуты и 36 секунд Плохо, что в дельфи нет встроенных регулярок, как это в MSVS сделано, при чём там сделано, как мне сказали "по-уму". |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
эм... может как-нибудь так?
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
нет, это слишком сложное:
Внимание регулярное выражение содержит ошибки: preg_match_all(): Unknown modifier '(' |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
ты это.. когда проверяешь на regexpr.ru, обрамляй регулярку в слэши-то: /(блабла)(блаблабла)/
Добавлено через 3 минуты и 14 секунд и кстати: применимо к регуляркам выражение "слишком сложное" практически не употребимо... |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 16 Всего: 160 |
Akella, можеть быть Вас устроит поиск всей строки телефонов, а не каждого в отдельности? Если да, то можно так:
Проект приаттачил. Вроде как работает. За исключением очевидных ошибок/опечаток (см. например, вторую строку т. , 80978247435). Такие опечатки не имеет смысла обрабатывать, т.к их может быть бесконечно много. Присоединённый файл ( Кол-во скачиваний: 8 )
regexp.zip 66,50 Kb-------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
можно меня на ТЫ, я не такой уже и старый Добавлено через 50 секунд нет, именно по отдельности, т.к. я потом по базе телефоны пробиваю Добавлено через 3 минуты и 18 секунд
здесь нужно выцепить 80978247435, какая же здесь очепятка? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
kemiisto, я такие взрослые выражения и сам потом не разрулю, если пользователям нужно будет что-либо подкорректировать
Добавлено через 1 минуту и 54 секунды мало того, проверил на regexpr.ru -> совпадений не найдено |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 16 Всего: 160 |
Akella, где ты видел пользователей, даже чисто теоретически способных корректировать регулярные выражения? Не показатель! Мало ли! У меня в проекте Delphi всё сработало. Скачай лучше http://www.regexpstudio.com/Downloads/TestRExp.rar от автора TRegExpr и пользуй для проверки регулярных выражений. Там кстати моё выражение тоже катит (что не удивительно). Проблема всё-таки с определением образца. Уж очень много альтернатив. Просто число - не катит; число, а потом какой-либо разделитель и опять число - опять не катит! Скобки ещё всякие, у.е. У меня складывается ощущение, что задача вообще не решаема. Даже вручную, словесно, сложно сформулировать правило поиска именно телефонных номеров в приведённом куске текста. -------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
я имел ввиду, что пользователю захочется немного подкорректировать условие поиска телефонов, но корректировать-то буду я тем более описания нет вот ответ с выражением и описанием http://forum.vingrad.ru/index.php?showtopi...t&p=1516904 Добавлено через 1 минуту и 31 секунду вот им и пользуюсь, немного подкорректировал и пользуюсь, просто других библиотек нет для дельфи Добавлено через 5 минут и 9 секунд я не спорю, что она полностью решаема, просто хотелось бы поиметь несколько более менее подходящих выражений. Добавлено через 7 минут и 16 секунд а про исключения не в курсе? можно ли в выражении задавать исключения, допустим не брать во внимание наборы цифр, где много нулей подряд, например 150000 или 1 500 000 Добавлено через 9 минут и 37 секунд как видно из текста, чаще всего (практически постоянно) попадаются номера, где разделитель пробел, тире или скобки, или без разделителей, ну так обычно телефоны и пишут, вот на таких условиях что можно придумать ещё? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
Akella, ты видел этот пост? - на твоем примере текста работает четко.
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а как описать это выражение?
|
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
э.. словами?..
ищем последовательность, которая начинается и заканчивается цифрой, а между ними от 4 до 15 цифр,пробелов,тире или скобок. после должны быть либо разделители(.,;\n\r), либо пробел, за которым не следует символ $ или русская 'у'. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 16 Всего: 160 |
Естественно! Перечни символов (символьные классы) — просто конечный набор символов. Он ограничивается квадратными скобками и содержит перечисление символов, которые можно вместо него подставить. Заменяется он всего на один символ, входящий в это перечисление. Если первый символ перечня (идущий сразу после открывающейся квардратной скобки) — ^, то это означает символ, который отсутствует в данном перечислении. Пример,
Пролистай прикреплённый документ (он пока ещё не дописан), авось пригодится! Заодно оцени! Присоединённый файл ( Кол-во скачиваний: 10 )
regexpr.pdf 223,89 Kb-------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Спасибо, прочёл, дописывай. Будет полезным.
|
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Не знаю что там было в предыдущем посте kemiisto прикреплено, не качается, но вот его же статья по регуляркам: http://forum.vingrad.ru/articles/topic-213075.html |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
я скачал и прочёл
|
|||
|
||||
| Akella |
|
||||||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Вот выражение
По идее мну нужно выудить числовое значение в скобках, допустим
или
или
или
правильно ли составлено выражение? Я так понимаю, что или цифры, или выражение в скобках, так? Добавлено @ 15:57 а мне нужны цифры в скобках Это сообщение отредактировал(а) Akella - 26.5.2008, 16:26 |
||||||||||
|
|||||||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
воде вот оно:
Это сообщение отредактировал(а) Akella - 26.5.2008, 16:42 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
можно проще:
к тому же у тебя в subexpr попадает только "дробная" часть, а все выражение вместе со скобками. приведенная рега поместит в subexpr все число. Добавлено через 3 минуты и 25 секунд только оно не очень строгое - в том плане, что и (...) будет удовлетворять условию. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |