«Общая схема абзаца» нуждается в более четком определении. Учитывая отсутствие ввода плюс ожидаемый результат, я должен угадать, что вы хотите здесь. Я также предполагаю, что вы примете любой язык. Вот perl
, почти наверняка не тот язык, с которым вы знакомы.
вход Принято считать:
do not match this line
[image.gif]
some words, usually a few lines
Bobert McBobson
emailaddress<mailto:[email protected]>
don't match this line either
[image.gif]
another few words
on another few lines
Bobina Robertsdaughter
emailaddress<mailto:[email protected]>
this line is also not for matching
Ожидаемый результат:
[image.gif]
some words, usually a few lines
Bobert McBobson
emailaddress<mailto:[email protected]>
---
[image.gif]
another few words
on another few lines
Bobina Robertsdaughter
emailaddress<mailto:[email protected]>
Решение с использованием perl
:
#!/usr/bin/perl -n007
my $sep = "";
while (/(\[image\.gif\].*?<mailto:[^>]*>(\r)?\n)/gms) {
print $sep . $1;
$sep = "---$2\n";
}
perl
царь регулярных выражений языков; многие говорили бы, что это все, что нужно. Здесь мы используем опцию -n007
, чтобы сообщить ей, чтобы прочитать все содержимое каждого файла и запустить на нем код как переменную по умолчанию.
$sep
начинает пустым, потому что нечего отделять до второго матча.
Затем мы выполняем цикл по каждому блоку текста, который соответствует регулярному выражению:
- соответствует буквальному
[image.gif]
- затем сопоставляет, как мало содержания после этого как можно
- затем буквального
<mailto:
и продолжается до тех пор, следующий >
- затем фиксирует разрыв строки (включая дополнительную поддержку для окончаний линии DOS)
- (see full regex explanation and example at regex101)
Затем мы печатаем совпадение и, наконец, устанавливаем разделитель на три штриха и прерывание строки (при необходимости добавляются линии линии DOS).
Теперь вы можете запустить его:
$ perl answer.pl input.txt
[image.gif]
some words, usually a few lines
Bobert McBobson
emailaddress<mailto:[email protected]>
---
[image.gif]
another few words
on another few lines
Bobina Robertsdaughter
emailaddress<mailto:[email protected]>
Вы тест на '[image.gif \]', которые не происходят в вашем входе образца. Не могли бы вы исправить свой вопрос? – trincot
Slow '(? S) (? <= \ [Image \ .gif \]). *? (? =
sln