Запрос регулярных выражений: как найти в PDF-файле фразу, в которой слова в этой фразе появляются более чем в одной строке? - PullRequest
1 голос
/ 07 мая 2010

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

Я хочу выполнить поиск по всем файлам PDF за неделю, где один PDF = одна страница журнала (изначально сделано в Adobe InDesign CS3 и Adobe InCopy CS3).

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

Например, при поиске«CB Richard Ellis» и «Cushman & Wakefield», я не получил результата, когда текст выглядел следующим образом:

DTZ побил BNP PRE, CB [разрыв строки здесь]

Ричард Эллис и Cushman& [разрыв строки здесь]

Уэйкфилд, чтобы заключить контракт.[конец строки здесь]

Может кто-нибудь посоветовать мне, как написать регулярное выражение, которое будет игнорировать пробел между словами и игнорировать окончания строк ИЛИ, которое будет искать слова, включая все типы пробелов(то есть неравные пробелы между словами; пробелы в конце строк или концах строк; и вкладки (я предполагаю, что эта информация каким-то образом встроена в файлы PDF).

Вот пример наборатерминов, которые я попросил PowerGREP найти:

\bCB Richard Ellis\b
\bCB Richard Ellis Hotels\b
\bCentaur Services\b
\bChapman Herbert\b
\bCharities Property Fund\b
\bChetwoods Architects\b
\bChurch Commissioners\b
\bClive Emson\b
\bClothworkers’ Company\b
\bColliers CRE\b
\bCombined English Stores Group\b
\bCommercial Estates Group\b
\bConnells\b
\bCooke & Powell\b 
\bCordea Savills\b
\bCrown Estate\b
\bCushman & Wakefield\b
\bCWM Retail Property Advisors\b

[Обратите внимание, что между каждым \ b в конце каждой фразы и началом следующей фразы есть разделенный жесткий возврат.]

Кстати, я производственный журналист и обычно не занимаюсь поиском решений ИТ-типа, и мне трудно осваивать технический язык на сайте PowerGREP.

Спасибо за помощь

Элисон

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

Регулярное выражение для совпадающих пробелов \s, поэтому оно будет

\bCB\s+Richard\s+Ellis\b

(\s+ = соответствует хотя бы одному пробелу). Разрывы строки: \n (перевод строки) и \r (возврат), в зависимости от вашей ОС. Поэтому формирование группы с использованием [], включающей все [\r\n\s], приведет к:

\bCB[\r\n\s]+Richard[\r\n\s]+Ellis\b
0 голосов
/ 07 мая 2010

У вас есть жестко запрограммированные пробелы в ваших именах. Замените их на \s+, и вы должны быть в порядке.

например:.

CB\s+Richard\s+Ellis

Что происходит, когда у вас есть принудительный разрыв строки, у него больше нет этого пробела (""). Вместо этого он имеет \n или \r\n. Использование \s+ означает, что вы ищете любой символ пробела, включая возврат каретки и перевод строки, в количестве одного или более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...