Diary?::2005-09-01

俺には変な癖があって、部屋の片付けを始めるとハードディスクの整理や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)

わざわざシングルトン化しなくてもよかったか? まだいろいろメソッドが足りないけれど、それは各自で実装してってことで。

Written by Kuwata Chikara
Creative Commons