|
Модераторы: ginnie |
|
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
ну да, наверное, у буржуев ведь нет знака №
Добавлено через 11 секунд и программа не юникодная Добавлено через 39 секунд в общем я перешёл на #, пока что |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
Хочу поднять тему, т.к. есть ещё проблема.
В тексте объявлений есть телефоны. А также есть вот такой текст: решения соответствуют требованиями СНиП 31-01-2003 Здания Получается так, что выделенная группа цифр определяется, как номер телефона. Можно что-то придумать такое, что если перед номером есть слово: "СНиП ", то игнорировать найденный текст? |
|||
|
||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Как была решена предыдущая проблема?
Это сообщение отредактировал(а) Pfailed - 12.4.2013, 15:51 |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
||||
|
||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
На мой взгляд некорректное выражение. Удовлетворяет строке: решения соответствуют требованиями #01-01-2003 Здания.
А должно ли? Это сообщение отредактировал(а) Pfailed - 12.4.2013, 17:28 |
|||
|
||||
DurRandir |
|
||||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 2 Всего: 17 |
Я бы чуть по другому сделал. Т.к. перед датой может не только "СНИП" идти (и придётся составлять список слов-исключений - регулярка расползётся быстро), я бы вырезал \d{2}-\d{2}-\d{4} как невалидный формат (никто так телефон не делит). Т.е. либо задал для хвоста [\d-() ]{6,17} более строгий формат, либо добавил соответствующий assertion: (?!\d{2,2}-\d{2,2}-\d{4,4}). Итого:
*добавление* а оно же начнёт матчиться после -01-2003 В общем, лучше уточнить валидный формат или делать доп. проверку *после* поиска и выкидывать такие совпадения. Т.к. я не уверен, что даже нечто в духе
не зацепит лишнего Это сообщение отредактировал(а) DurRandir - 12.4.2013, 18:22 |
||||
|
|||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
А в чём фишка писать \d{n,n}? Разве это не эквивалентно \d{n}?
Добавлено через 6 минут и 10 секунд Но и не отработает на валидной (по условию) строке: решения соответствуют требованиями -01-01-2003 Здания |
|||
|
||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Вариация на тему моего первого поста в этой теме
Уже в коде смотрим на вторую match группу. Если она определена -- берем ее значение. Если не определена -- переходим на следующую итерацию. Это сообщение отредактировал(а) Pfailed - 12.4.2013, 18:44 |
|||
|
||||
DurRandir |
|
||||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 2 Всего: 17 |
Да я не везде исправил. Эквивалентно)
"Если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы" в полный рост, в общем то) Можно только гадать, подойдёт или не подойдёт под реальные данные, которые есть у Akella. Это сообщение отредактировал(а) DurRandir - 12.4.2013, 18:42 |
||||
|
|||||
Akella |
|
||||||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
Не то. а НЕ должно находить Добавлено через 9 минут и 49 секунд
а вот это уже норм Добавлено через 10 минут и 8 секунд Можно его словесно расшифровать? |
||||||
|
|||||||
Pfailed |
|
|||
Опытный Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
В какой match группе нашлось? Я же написал вам, что нужно смотреть только на вторую match группу. Все исключения в первую match группу, все подходящие во вторую. |
|||
|
||||
DurRandir |
|
|||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 2 Всего: 17 |
Я в том посте постарался описать, как конструировать. Оно состоит из 3х частей - двух отрицательных якорей: (?<!) - не начинать матчинг, если до позиции стоит -#\d (?!) - если строка дальше попадает под формат d{2}-\d{2}-\d{4}, то так же не начинать матчинг и потом положительная проверка под подходящий формат |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
К сожалению, "смотреть" только туда или только сюда - не подходит, потому что в одном случае будет это выражение, а в другом случае будет другое выражение, но программа одна на всех, как говорится. Можно менять только образец (выражение поиска). |
|||
|
||||
tishaishii |
|
|||
Создатель Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Создавал такое рег.выр. импирически около 3х лет. Задача была вынимать объявления из отсканированных и распознанных объявлений, преобразованных в HTML. И нужно было искать номера телефонов в БД, чтобы показывать, обработан ли податчик объявления.
В общем, импирически, рег.выр. хранился в отдельном файле около 2х кб + дополнительный анализ подстрок. |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |