読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

subとグループの参照を使って、順番を並び替えた新データをつくる

python

Python正規表現ライブラリ"re"は機能が充実しています。
文字列の置き換えに使うsub関数とグループ参照を併用すると必要部分を抽出して並び替え……みたいな事は割りとスマートにいけます。

実際のところ

こんな例があったとします。*1

  • データは次の形式でくる"%{16進数表記_い}!{16進数表記_ろ}!{16進数表記_は}%"という形式でくる
  • 出力形式はJSON"{"data_a":{16進数_は}, "data_b":{16進数_い}}"

泥臭くやると、searchして変数に格納、format関数なりで整形……という手が感が付きます。
ここでsubとグループの参照を使ってやると、割りかしスッキリ書くことができます。
……もっといい方法がありそうですけどね。

query = b'%([0-9a-f]{2,})!([0-9a-f]{2,})!([0-9a-f]{2,})%\n'
result = b'{"data_a":"0x\g<3>", "data_b":"0x\g<1>"}'
rcvdPckt = b'%ac2!2ab4!f5%\n'
re.sub(query, result, rcvdPckt)
#>> b'{"data_a":"0xf5", "data_b":"0xac2"}'

*1:実際やった例は、こんな狂ったパケットでは無かったですが