ファイルをトークンのリストに解析したい。各トークンは少なくとも 1 行で構成されますが、複数行で構成することもできます。各トークンは正規表現に一致します。入力がトークンのシーケンスでない場合 (つまり、先頭、中間、または末尾にガベージがない場合) にエラーを通知したいと考えています。入力ファイルは比較的小さいため、メモリ消費は気にしません。
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 な方法はありますか? (行ごとに解析してから、手作りのステート マシンをその上に構築したくありません。)