如果前一行不是以星号开头,则用正则表达式替换行首的星号

时间:2020-03-24 10:07:54

标签: regex perl

仅在上一行不是以相同字符开头的情况下,我才尝试在行首替换星号*或其他特定字符。

换句话说

Something.
* some bullet point

Something.

* some bullet point

我正在尝试

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

但没有结果。

理想情况下是perl-但我可能可以翻译其他语言

2 个答案:

答案 0 :(得分:2)

如果要逐行读取文件,请使用标志变量来记住上一行是否以星号开头:

#!/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 :(得分:1)

您的正则表达式存在一些问题。

#!perl
use strict;

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

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

print $txt;

有效。

相关问题