我正在尝试检测和更改以下格式的列表.输入字符串
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不可能再做一遍,因为我只对两个或更多项目的列表感兴趣.
使用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)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |