potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

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']