ともあれ、これまで2種類のパターンを作って両方でマッチを試み、マッチした方を採用するというフローだったが、assertion を使うことで正規表現パターンを1種類に纏めることができそうだ。これで Python 部分はかなりすっきりする。
(?P<name> expression)? の後で (?(name)|(?P<name>expression)) として、二箇所のうちどちらかマッチした方が name というグループになるという挙動を期待したが、単に二重定義で怒られた。まあ駄目でもともとというつもりだったけれど、これだけは Python の方で処理することになりそうだ。
マッチしなかった方は None になるので、max() で比較するとマッチした方が返ってくる。簡潔だけれど、abuse だろうか。
とりあえずもう寝よう。
0 件のコメント:
コメントを投稿