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の標準ライブラリである re と shlex は、追加のインストールなしで利用できます。
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を分割対象文字列、strをshlex.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に格納されている、直前の正規表現検索関数の結果を返します。引数: なし。
戻り値: (
listorNone)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)動作: オブジェクトの文字列表現を返します。継承元である
tkObjectのClassPath()メソッドを呼び出します。引数: なし。
戻り値: (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() 関数では、このライブラリのいくつかの機能の簡単なデモンストレーションが行われます。
DelQuote関数のテスト:" \" abc\" "という文字列から二重引用符が除去され、" abc"が出力されます。" '\" abc\"' "という文字列から単一引用符が除去され、"\" abc\""が出力されます。
モジュール関数
FindIterのテスト:複数行の文字列
Title = abc def\nName = dkl\nに対して、^\s*(\S+)\s*=\s*(.*)\s*$という正規表現でキーと値のペアを抽出します。'im'フラグ(大文字・小文字を無視、複数行モード)と'is'フラグ(大文字・小文字を無視、.が改行を含む)の両方でFindIterを実行し、結果をリストのリストとして出力します。
クラスメソッド
tkRegExp().FindIterのテスト:tkRegExpクラスのインスタンスを作成し、上記と同じ正規表現と文字列に対してFindIterメソッドを実行します。'im'フラグと'isx'フラグ(大文字・小文字を無視、.が改行を含む、冗長モード)の両方で実行し、結果をリストのリストとして出力します。
これらのテスト出力は、ライブラリの各関数の基本的な動作と、特に正規表現フラグの影響を確認するのに役立ちます。