Pythonでクラスを定義し正規表現を使用し文字列内の数字を抽出する

スポンサーリンク

Pythonでクラスを定義し正規表現を使用し文字列内の数字を抽出してみます。

なお、今回はPythonの標準ライブラリであるreモジュールを用います。

■今回の環境(Python)

今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)

■クラスの定義

では、早速Pythonでクラスを定義し正規表現を使用し文字列内の数字を抽出するためにコードを書いていきます。

■コード

import re

class NumberSorter:
    def __init__(self, string):
        self.string = string

    def get_sorted_numbers(self):
        nums = [int(s) for s in re.findall(r'\d+', self.string)]
        return sorted(nums, reverse=True)

if __name__ == '__main__':
    input_string = 'abc123def456ghi789'
    sorter = NumberSorter(input_string)
    sorted_numbers = sorter.get_sorted_numbers()
    print(sorted_numbers)

今回はまずimportでreモジュールを呼び出します。NumberSorterというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。このクラスは、定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2の引数,パラメータとしてstringを設定します。なお、最初の「self(自己)」という引数,パラメータを介して、「string」というクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いて「string」を指定します。

その後、def文を用いてget_sorted_numbers()という関数を定義します。括弧内には第1の引数,パラメータとしてselfを設定します。設定後、関数が呼び出された時の処理として、角括弧”[ ]*”を用いてnumsというリストを作成します。作成後、stringで受け取った文字列をreモジュールのfindall()の第2の引数,パラメータとして渡します。findall()は、文字列内で一致するすべての正規表現パターンを検索して、マッチするすべての部分文字列をリストとして返しますので、第1の引数,パラメータとして正規表現である「r’\d+’」を渡します。これは文字列内の連続した数字と表す。これにより、すべての正規表現パターンを検索し、マッチするすべての部分文字列をs変数に1つずつ順番に格納していきます。そして、s変数に格納された部分文字列は、int()に対して(.)ドット演算子を用いてint()を使い数字を”数値”に変換し、リストに追加します。その後、sorted()を用います。括弧内には、第1引数,パラメータとしてnumsのリストを渡し、第2引数,パラメータとして「reverse=True」を渡します。これでnumsのリストが降順にソートされ、これをreturnとして返すという処理になります。

次に「if __name__ == ‘__main__」を用いて、このファイルが直接実行された場合の実行するためのコードを書きます。コードは、input_stringという変数を定義し、その中に数字を含む文字列を格納します。格納後、sorterという変数を定義し、その中でNumberSorter()を呼び出します。インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。この時に括弧内に引数,パラメータとしてinput_stringを渡します。その後、sorted_numbersという変数を定義し、その中で作成したオブジェクトであるsorterに対し(.)ドット演算子を用いてget_sorted_numbers()にアクセスし呼び出されます。呼び出された後、get_sorted_numbers()の処理が実行し結果がsorted_numbers内に格納されます。

最後にsorted_numbers内の情報をprint()を用いて出力します。

■実行・検証

このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、クラスを定義し正規表現を使用し文字列内の数字を抽出し、抽出された数字を出力させることができました。

コメント

タイトルとURLをコピーしました