tkre.py ライブラリ ドキュメント


ライブラリの機能や目的

tkre.py ライブラリは、Pythonの標準正規表現モジュール re およびシェルライクな文字列分割を行う shlex モジュールの機能を拡張し、より使いやすいインターフェースで文字列処理を行うためのユーティリティ関数とクラスを提供します。

主な目的は、正規表現を用いた文字列の検索、マッチング、置換、分割といった操作を簡素化し、特定の文字列フォーマット(例: 引用符で囲まれた文字列や空白を含む文字列)の処理を補助することにあります。特に、正規表現のフラグ指定を簡略化する機能や、マッチ結果を詳細に取得する機能が提供されています。

このライブラリは、tklib.tkobject を継承したクラスを含んでいますが、直接的なGUI要素とは関連せず、より汎用的な文字列操作ツールとして機能します。

importする方法

tkre.py ライブラリを他のPythonプログラムから利用するには、以下の方法があります。

ライブラリ全体をインポートする場合:

import tkre

# 例: tkre.Search関数を使用
result = tkre.Search(r'pattern', 'text')

特定の関数を直接インポートする場合:

from tkre import Search, DelQuote

# 例: Search関数とDelQuote関数を直接使用
result = Search(r'pattern', 'text')
cleaned_string = DelQuote('"hello"')

必要な非標準ライブラリとインストール方法

このライブラリは、tklib という非標準ライブラリに依存しています。具体的には tklib.tkobject をインポートしています。

tklib がシステムにインストールされていない場合、以下の pip コマンドでインストールできます。

pip install tklib

Pythonの標準ライブラリである reshlex は、追加のインストールなしで利用できます。

importできる変数と関数

グローバル変数

  • last_res

    • 正規表現の検索 (Search, Match, FindAll, FindIter) 関数が最後に処理した結果を保持するグローバル変数です。これらの関数が実行されるたびに更新されます。

関数

  • GetReg_flag(flag='')

    • 動作: re モジュールで使用される正規表現フラグのビットマスクを生成します。

    • 引数:

      • flag (str): 正規表現フラグを表す文字列。以下の文字を含めることで、対応する re フラグが設定されます。

        • 'i': re.IGNORECASE (大文字・小文字を無視)

        • 's': re.DOTALL (. が改行を含むすべての文字にマッチ)

        • 'm': re.MULTILINE (^$ が各行の先頭と末尾にマッチ)

        • 'a': re.ASCII (ASCIIのみにマッチ)

        • 'l': re.LOCALE (ロケール設定に従う)

        • 'x': re.VERBOSE (冗長モード、コメントや空白が無視される)

    • 戻り値: (int) 対応する re フラグのビットマスク。

  • DelQuote(str)

    • 動作: 入力文字列の先頭と末尾から、単一引用符 (') または二重引用符 (") を除去します。引用符は必ずペアで存在する場合にのみ除去されます。文字列の前後にある空白は先に除去されます。

    • 引数:

      • str (str): 処理対象の文字列。

    • 戻り値: (str) 引用符が除去された文字列。

  • DelSpace(str)

    • 動作: 入力文字列の先頭と末尾から空白文字を除去します (str.strip() のラッパー)。

    • 引数:

      • str (str): 処理対象の文字列。

    • 戻り値: (str) 先頭と末尾の空白が除去された文字列。

  • DelTopSpace(str)

    • 動作: 入力文字列の先頭から空白文字を除去します (str.lstrip() のラッパー)。

    • 引数:

      • str (str): 処理対象の文字列。

    • 戻り値: (str) 先頭の空白が除去された文字列。

  • DelLastSpace(str)

    • 動作: 入力文字列の末尾から空白文字を除去します (str.rstrip() のラッパー)。

    • 引数:

      • str (str): 処理対象の文字列。

    • 戻り値: (str) 末尾の空白が除去された文字列。

  • Split(reg, str)

    • 動作: 正規表現 reg を区切り文字として使用し、文字列 str を分割します。

    • 引数:

      • reg (str): 分割に使用する正規表現パターン。

      • str (str): 分割対象の文字列。

    • 戻り値: (list of str) 分割された部分文字列のリスト。

  • shSplit(reg, str)

    • 動作: shlex.split を使用して、シェルスタイルの構文に従って文字列を分割します。この実装では、reg を分割対象文字列、strshlex.split 関数の comments 引数として渡します。これは一般的な shlex.split の使用方法とは異なる可能性があります。

    • 引数:

      • reg (str): シェル形式で記述された分割対象の文字列。

      • str (bool): comments 引数として渡されるブール値。True の場合、コメント文字 (#) をコメントの開始として扱います。

    • 戻り値: (list of str) 分割された部分文字列のリスト。

  • Sub(reg, target, str, n=0)

    • 動作: 文字列 str 内で正規表現 reg にマッチする部分を target で置換します。

    • 引数:

      • reg (str): 検索する正規表現パターン。

      • target (str): 置換する文字列。

      • str (str): 処理対象の文字列。

      • n (int, オプション): 置換を行う最大回数。0 の場合、すべてのマッチが置換されます (デフォルト)。

    • 戻り値: (str) 置換後の文字列。

  • SubN(reg, target, str, n=0)

    • 動作: 文字列 str 内で正規表現 reg にマッチする部分を target で置換し、置換後の文字列と置換回数をタプルで返します。

    • 引数:

      • reg (str): 検索する正規表現パターン。

      • target (str): 置換する文字列。

      • str (str): 処理対象の文字列。

      • n (int, オプション): 置換を行う最大回数。0 の場合、すべてのマッチが置換されます (デフォルト)。

    • 戻り値: (tuple) (置換後の文字列, 置換回数) のタプル。

  • get_result()

    • 動作: グローバル変数 last_res に格納されている、直前の正規表現検索関数の結果を返します。

    • 引数: なし。

    • 戻り値: (list or None) last_res の現在の値。

  • Search(reg, str, flag='')

    • 動作: 文字列 str 内で正規表現 reg に最初にマッチする部分を探します。マッチが見つかった場合、そのマッチオブジェクトのすべてのグループ(グループ0を含む)をリストとして返します。マッチが見つからない場合、None を返します。検索結果は last_res に格納されます。

    • 引数:

      • reg (str): 検索する正規表現パターン。

      • str (str): 検索対象の文字列。

      • flag (str, オプション): GetReg_flag 関数で解釈される正規表現フラグ文字列 (デフォルト: '')。

    • 戻り値: (list of str or None) マッチしたグループのリスト、または None

  • Match(reg, str, flag='')

    • 動作: 文字列 str の先頭から正規表現 reg にマッチするかを試みます。マッチが見つかった場合、そのマッチオブジェクトのすべてのグループ(グループ0を含む)をリストとして返します。マッチが見つからない場合、空のリストを返します。検索結果は last_res に格納されます。

    • 引数:

      • reg (str): マッチングする正規表現パターン。

      • str (str): 検索対象の文字列。

      • flag (str, オプション): GetReg_flag 関数で解釈される正規表現フラグ文字列 (デフォルト: '')。

    • 戻り値: (list of str) マッチしたグループのリスト、または空のリスト。

  • FindAll(reg, str, flag='')

    • 動作: re.findall 関数を呼び出し、マッチしたすべての部分文字列のリストを取得しようとしますが、その結果に対して group(i) を呼び出すため、実装の都合上、通常は空のリストを返します。検索結果は last_res に格納されます。

    • 引数:

      • reg (str): 検索する正規表現パターン。

      • str (str): 検索対象の文字列。

      • flag (str, オプション): GetReg_flag 関数で解釈される正規表現フラグ文字列 (デフォルト: '')。

    • 戻り値: (list of str) 通常は空のリスト。

  • FindIter(reg, str, flag='')

    • 動作: 正規表現 reg にマッチするすべての非重複マッチについてイテレータを返します。各マッチオブジェクトからすべてのグループ(グループ0を含む)を抽出し、それらをネストされたリストとして返します。検索結果は last_res に格納されます。

    • 引数:

      • reg (str): 検索する正規表現パターン。

      • str (str): 検索対象の文字列。

      • flag (str, オプション): GetReg_flag 関数で解釈される正規表現フラグ文字列 (デフォルト: '')。

    • 戻り値: (list of list of str) 各マッチのグループのリストのリスト。

クラス

  • class tkRegExp(tkObject)

    • tklib.tkobject.tkObject を継承した正規表現クラス。現時点では FindIter メソッドのラッパーのみを提供します。

    • __init__(self, **args)

      • 動作: オブジェクトを初期化します。特にプロパティは設定されません。

      • 引数:

        • **args: キーワード引数 (使用されません)。

    • __del__(self)

      • 動作: オブジェクトが破棄される際に呼び出されます。特に何も行いません。

      • 引数: なし。

    • __str__(self)

      • 動作: オブジェクトの文字列表現を返します。継承元である tkObjectClassPath() メソッドを呼び出します。

      • 引数: なし。

      • 戻り値: (str) クラスパスの文字列。

    • FindIter(self, reg, str, flag='')

      • 動作: グローバル関数 FindIter を呼び出し、その結果を返します。

      • 引数:

        • reg (str): 検索する正規表現パターン。

        • str (str): 検索対象の文字列。

        • flag (str, オプション): GetReg_flag 関数で解釈される正規表現フラグ文字列 (デフォルト: '')。

      • 戻り値: (list of list of str) グローバル関数 FindIter と同じ戻り値。

main scriptとして実行したときの動作

tkre.py ファイルが直接Pythonインタプリタで実行された場合 (python tkre.py)、main() 関数が実行されます。main() 関数では、このライブラリのいくつかの機能の簡単なデモンストレーションが行われます。

  1. DelQuote 関数のテスト:

    • "  \" abc\"  " という文字列から二重引用符が除去され、" abc" が出力されます。

    • "  '\" abc\"'  " という文字列から単一引用符が除去され、"\" abc\"" が出力されます。

  2. モジュール関数 FindIter のテスト:

    • 複数行の文字列 Title = abc def\nName = dkl\n に対して、^\s*(\S+)\s*=\s*(.*)\s*$ という正規表現でキーと値のペアを抽出します。

    • 'im' フラグ(大文字・小文字を無視、複数行モード)と 'is' フラグ(大文字・小文字を無視、. が改行を含む)の両方で FindIter を実行し、結果をリストのリストとして出力します。

  3. クラスメソッド tkRegExp().FindIter のテスト:

    • tkRegExp クラスのインスタンスを作成し、上記と同じ正規表現と文字列に対して FindIter メソッドを実行します。

    • 'im' フラグと 'isx' フラグ(大文字・小文字を無視、. が改行を含む、冗長モード)の両方で実行し、結果をリストのリストとして出力します。

これらのテスト出力は、ライブラリの各関数の基本的な動作と、特に正規表現フラグの影響を確認するのに役立ちます。