/note/tech

Pythonでリストの内容を正規表現でフィルタリング

例えば、次のような脈絡のないデータリストがあったとする。

["1", "2", "3", "Apple", "Orange", "100", "Fish"]

この中から文字列の項目のみ抽出したいと考えた時どうするべきか。

まず、普通にfor文でループさせていく方法があるが、ここではスルーする。

もうひとつのパターンとして、filter関数を使うこともできる。

リストからの抽出であればfilter関数を使う方がシンプルに書ける(らしい)。

具体的には以下のようになる。

import re

def serch_keyword_re(keyword_re, values):
    r = re.compile(keyword_re)
    return filter(lambda val:r.match(val), values)

if __name__ == '__main__':
    values = ["1", "2", "3", "Apple", "Orange", "100", "Fish"]
    result = serch_keyword_re("[A-Za-z]", values)
    print(list(result)) # ['Apple', 'Orange', 'Fish']

if文が(見掛け上)消えたのですっきりしたように見える。

ついでに関数化することで何となく再利用できるようにしてみた。

とはいえ、この程度ならリスト内包表記で十分なのでは?? 感はある。