我想将文件解析为令牌列表。每个令牌至少包含一行,但可以包含更多。每个标记都匹配一个正则表达式。如果输入不是标记序列(即没有垃圾前导、中间或尾随),我想发出错误信号。我不关心内存消耗,因为输入文件相对较小。
在 Perl 中,我会使用类似(伪代码)的东西:
$s = slurp_file ();
while ($s ne '') {
if ($s =~ s/^\nsection (\d)\n\n/p) {
push (@r, ['SECTION ' . $1, ${^MATCH}]);
} elsif ($s =~ s/^some line\n/p) {
push (@r, ['SOME LINE', ${^MATCH}]);
[...]
} else {
die ("Found garbage: " . Dumper ($s));
}
}
我当然可以将此 1:1 移植到 Python,但有没有更 Pythonic 的方式来做到这一点?(我不想逐行解析,然后在上面构建一个手工制作的状态机。)