Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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

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)