Регулярное выражение для замены звезды в начале строки, если предыдущая строка не начинается со звезды - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь заменить звезду * или другой указанный c символ в начале строки, но только если предыдущая строка не начинается с того же символа.

В другом слова для замены

Something.
* some bullet point

на

Something.

* some bullet point

Я пытаюсь с

s/\n[^\*](.+?)\n\*/\n$1\n\n*/ms;

, но без результата.

Идеально в perl - но я, вероятно, могу перевести с других языков

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Если вы читаете файл построчно, используйте переменную flag, чтобы запомнить, начиналась ли предыдущая строка звездочкой:

#!/usr/bin/perl
use warnings;
use strict;

my $previous;
while (<DATA>) {
    print "\n" if /^\*/ && ! $previous;
    $previous = /^\*/;
    print;
}

__DATA__
Something.
* some bullet point
* but keep this
1 голос
/ 24 марта 2020

Есть некоторые проблемы с вашим регулярным выражением.

#!perl
use strict;

my $txt = <<EOT;
Something.
* some bullet point
EOT

$txt =~ s/^([^\*][^\n]*\n)\*/$1\n\*/mg;

print $txt;

работает.

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