如何替换此列表中的每个项目?

Ann*_*nna 3 regex perl

我正在尝试检测和更改以下格式的列表.输入字符串

bla bla
* a
* list
* here
bla * bla
bl**a
* another
* list 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

bla bla
LIST
+ a
+ list
+ here
END
bla * bla
bl**a
LIST
+ another
+ list 
END
Run Code Online (Sandbox Code Playgroud)

在这方面,我意识到我应该使用另一种解析器,并且正则表达式不是最好的工具.尽管如此,它让我很好奇,我想知道这个问题是否可以用正则表达式解决.我可以检测到列表并添加LIST/END令牌:

s/((^\* .*\n){2,})/LIST\n\1\nEND/gm;
Run Code Online (Sandbox Code Playgroud)

但是,我将如何更改列表中的各个项目?有没有办法使用这些量化的捕获组?s/^\* /+ /g不可能再做一遍,因为我只对两个或更多项目的列表感兴趣.

wol*_*ats 8

使用Perl正则表达式(正则表达式)确实可以解决这个问题.
嵌套s///可以解决问题:

$/=undef;
$_=<DATA>;
s{((^\* .*\n){2,})}{
    "LIST\n$1END\n"=~s{^\*}{+}mgr;
}gme;
print ;

__DATA__
bla bla
* a
* list
* here
bla * bla
bl**a
* another
* list 
Run Code Online (Sandbox Code Playgroud)
bla bla
LIST
+ a
+ list
+ here
END
bla * bla
bl**a
LIST
+ another
+ list
END
Run Code Online (Sandbox Code Playgroud)