2015-09-11 6 views
0

I несколько файлов с парой миллионов строк с чем-то вроде следующего:Regex - Положительные касательно предшествующего текста

9/9/2015 2:50:39 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid HW Plus SV.xls Complete. 
9/9/2015 2:50:39 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid Mop Granule SV.xls Complete. 
9/9/2015 2:50:40 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid Mop Smooth 1.5 SV.xls Complete. 

Я надеялся захватить имя файла в каждой строке с просмотром назад со следующим:

$(?<=\/) Конечно, мне нужно будет удалить «Полный». но я рисую, я начинаю медленно

но я не освоил искусство регулярного выражения. может ли кто-нибудь сообщить мне, что я делаю неправильно?

спасибо.

+1

Какой язык или инструмент вы используете? –

+0

Notepad ++ Для меня – user68650

ответ

1

Это может работать - вы бы извлечь имя файла из группы захвата:

\/([^\/]*) Complete.$ 

Вот пример на RegExr: http://www.regexr.com/3bp2l

0

является касательно предшествующего текста нулевой ширины утверждение в положении. Это не способ сообщить регулярному выражению, с чего начать - он всегда должен начинаться с самого начала. Возможно, вы можете использовать регулярное выражение, например, .*/(.*) Complete, чтобы зафиксировать это.

Если вы работаете с оболочкой, то инструмент cut подходит для этого.

# get everything after the last slash and before the last space (` Complete`) 
rev $INPUT_FILE | cut -d'/' -f 1 | cut -d' ' -f2- | rev 
0

Вы можете использовать это регулярное выражение с просмотром назад:

/(?<=\/)[^\/]+$/ 

Обязательно используйте режим MULTILINE.

RegEx Demo

1

Вам не нужно усложнять с просмотром назад, если линии все в этом формате. Вы можете использовать жадные соответствия, чтобы получить то, что хотите.

.*\/(.*) Complete. 

Который по существу:

Match все (в том числе/'s) до а/с последующим текстом (в данном случае ваше имя файла), за которыми следует "Complete".

Соответствующая группа содержит имя файла.

Итак, для Regex Найти и заменить в N ++ вы должны использовать:

Найти

.*\/(.*) Complete. 

Заменить

$1 

Это оставит вам только имя файла, в каждой строке.

 Смежные вопросы

  • Нет связанных вопросов^_^