俺には変な癖があって、部屋の片付けを始めるとハードディスクの整理やWebページのコンテンツの見直しを始めてしまう。
ふとRDFを用いてパッケージ間の依存関係をとかわけのわからないことを思い付いたが、どう考えてもキチガイのやることなので記憶から抹消。
マニュアルには一言、「ソース読め」とだけ書いてみたいのだけれど。流石にそれをやるわけには行かないよなあ。
でもマニュアル作りってどうにも苦手なんだよな。
絶対に俺以外にも誰かがやってるだろうけど、正規表現をキャッシュするモジュールを作ってみた。
import re
I = re.I
L = re.L
M = re.M
X = re.X
U = re.U
S = re.S
class RegException(Exception):
def __init__(self, s):
self.s = s
def __str__(self):
return self.s
class Regexp(object):
instance = None
reg = {}
def __init__(self):
raise Exception
@classmethod
def get_instance(cls):
if cls.instance is None:
cls.instance = object.__new__(cls)
return cls.instance
def get_regexp(self, pattern, flag):
try:
return self.reg[(pattern, flag)]
except:
try:
self.reg[(pattern, flag)] = re.compile(pattern, flag)
return self.reg[(pattern, flag)]
except:
raise RegException("Invalid syntax.")
def __call__(self, pattern, string, flag=0):
m = self.get_regexp(pattern, flag).search(string)
if not m:raise RegException("Pattern not found.")
return m.groups()
def search(self, pattern, string, flag=0):
m = self.get_regexp(pattern, flag).search(string)
if not m:raise RegException("Pattern not found.")
return m
def split(self, pattern, string, maxsplit=0, flag=0):
return self.get_regexp(pattern, flag).split(string, maxsplit)
def sub(self, pattern, repl, string, flag=0):
return self.get_regexp(pattern, flag).sub(repl, string)
わざわざシングルトン化しなくてもよかったか? まだいろいろメソッドが足りないけれど、それは各自で実装してってことで。