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

Bye Bye Moore

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

findall関数やfinditer関数でゴチャゴチャした文字列から必要なものだけ引っ張り出す

python

finallやfinditerは標準付属の正規表現ライブラリにくっついている関数です。

  • 何やらゴチャゴチャした文字列がある
  • その中でほしいのは一部
  • 結果は文字列型にしたい

というような要件で役に立ちます。

実際のところ

findall

最も雑な方法はfindallで指定して、joinでくっつけてしまう方法。
以下の例ではbyteArray型の変数baに対し、ptrnに一致する条件を抽出し","でくっつけています。

ptn = b""
b",".join(re.findall(ptrn,ba))

finditer

前後を加工する場合はfinditerとformatのあわせ技が良いでしょう。
結果はgroupに格納されます。

ptn = re.compile(b':([1-9A-F]{2})([1-9A-F]{2})[1-9A-F]+\n')
str = “”
for i in re.finditer(ptn,data):
  str += "{:04X}{:04X}{:04X}".format(int(i.group(1),16),int(i.group(2),16),0x01)