パイソンでは:
- 条件文では代入は許可されていません。
- 正規表現一致の状態は、他の一致情報も含む返された一致オブジェクトに基づいて決定されます。
ここで、10 または 15 の中から特定のパターンに一致させたいとします。最終的には、次のように雑然としたものになります。
m = pat1.match(buffer)
if m:
tok = tok1
val = m.group(0)
else:
m = pat2.match(buffer)
if m:
tok = tok2
val = m.group(0)
else:
m = pat3.match(buffer)
if m:
tok = tok3
val = m.group(0)
# extra processing here and there - makes looping unsuitable
else:
m = pat4.match(buffer)
if m:
tok = tok4
val = m.group(0)
else:
# ... keep indenting
私たちは本当に次のようなものを持ちたいと思っています:
if match ... pat1:
tok =
val =
elif match ... pat2:
tok =
val =
elif match ... pat3:
tok =
val =
...
(他の言語でも同様の機能を使用できます: 条件付きでの代入、標準の一致オブジェクトへの副作用、参照引数渡しによる別の形式の一致関数など)
ループを使用してパターンを実行することもできますが、一致ごとに処理にバリエーションがある場合は適切ではありません。
だから:一致条件を同じレベルに保つための素晴らしいpythonic方法はありますか?!