potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python3 反復可能オブジェクトから正規表現の一致部分が重複しない要素を1つずつ抜き出す

反復可能オブジェクト(Iterable)から正規表現の一致部分が重複しない要素を1つずつ抜き出すサンプルコードです。辞書型dictがキーと値のタプルで初期化でき、キーの重複する値を自動で上書きすることを利用しています。

import re

#元から重複しないのでセットとして用意
#リスト[...]などでも構わない。
values = ("ab1111", "ab1112", "ac2111", "ac2112")

#正規表現パターンの準備
#末尾2桁を一致部分とする。
#先頭が"a"でない要素は除外する。
pattern = re.compile(r"^a.+(\d\d)$")

#パターンの一致部分と一致部分のタプルリストから辞書の作成
#パターンに一致しない要素は除外される。
d = dict({(m.groups()[0], value) for value in values if (m := pattern.match(value))})

#キーの重複しないリストへ変換
l = list(d.values())
print(l)
#> ['ac2112', 'ac2111']