[ID CS4-CS6] Помогите разобраться с отрицательным просмотром

Статус
Закрыто для дальнейших ответов.

vinnik63

Участник
Топикстартер
Сообщения
322
Реакции
99
Есть текст программы примерно такого вида:

ТВ Центр
23.10 Х/ф «Ревность»
02.50 Д/ф «Эдгар По»
Рен ТВ
05.00, 17.00 «Территория заблуждений»
09.55 «Минтранс»
СТС
06.00 М/с «Зов джунглей» (2)
06.35 М/с «Алиса знает, что делать!»
Россия К
06.30 «Евроньюс»
10.00 «Библейский сюжет»

Мне нужно найти и выделить только названия каналов. Для этого пытаюсь использовать отрицательный просмотр назад, чтобы найти абзацы, не начинающиеся с двойной цифры.
Задаю в поиске:
(?<!^\d\d).+
но поиск находит все абзацы подряд.
Что я делаю не правильно?
 

NNN5

Модератор
15 лет на форуме
Сообщения
1 256
Реакции
1 012
Лучше искать абзацы, начинающиеся с буквы:
Код:
^[\l\u].+
А еще лучше, имея список каналов (их не так уж много) загнать их поисковый запрос в явном виде, списком. Ведь есть такой канал как "5" (цифра в названии).
 

vinnik63

Участник
Топикстартер
Сообщения
322
Реакции
99
Лучше искать абзацы, начинающиеся с буквы:
Код:
^[\l\u].+
Я так и сделал... :) Просто хотелось бы разобраться с этим отрицательным просмотром, чтобы находить абзацы, НЕ начинающиеся с цифры (в данном случае с двух цифр подряд)... :)
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528
  • Спасибо
Реакции: similideus и vinnik63

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528
В Вашем случае можно и так искать:
^[^\d{2}].+
 
  • Спасибо
Реакции: Linxy и vinnik63

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Просто хотелось бы разобраться с этим отрицательным просмотром
Суть (?<=foo)bar в последовательной проверке двух условий (foo и bar). Успешным поиск считается если оба условия выполнены.

Индизайн начинает анализировать строку "23.10 Х/ф «Ревность»" с позиции перед первым символом (2). Встретив Lookbehind (?<!), движок откатывается назад на два символа и сравнивает их с выражением ^\d\d. Поскольку левее первой двойки ничего нет, поиск фейлится. Но для негативного поиска это считается успешным завершением, поэтому Индизайн продолжает работу и сравнивает строку "23.10 Х/ф «Ревность»" с выражением .+, что снова дает положительный результат. Т.е. оба условия выпонены, а значит строка найдена.

Вот это работает не так :) В квадратных скобках указывается множество допустимых (или недопустимых) символов — \d, {, 2 и }, а не регулярное выражение. Так что будут найдены все абзацы начинающиеся не с цифры или фигурной скобки. Про цифры удобнее записать так:
Код:
^\D.+
Я за вариант из #4, только наверное лучше проверять не просто две цифры, а добавить разделитель часов/минут, чтобы ловилось именно время, а не телеканалы '24_Doc' и '360°'
 
  • Спасибо
Реакции: blacksolg и LeonidB
Статус
Закрыто для дальнейших ответов.