まとめるスクリプトで引数を管理しやすくしようとしています。関連する項目を辞書にまとめて、辞書を関数から渡すことにしました。必要に応じてオブジェクトを引き出します。
これらの項目の1つは正規表現です。私はそれを機能させるために物事を適切に構造化する方法を見つけるのに苦労しています。
私の最初のコード(辞書なし)。私は正規表現をパーサーに「ハード」コーディングしています:
def TopnTail(self,line):
topRegEx = re.compile(r'(<!--make_database header end-->)')
tailRegEx = re.compile(r'(<!--make_database footer start-->)')
searchdumpTopOfPage = topRegEx.search(line)
searchdumpBottomOfPage = tailRegEx.search(line)
if searchdumpTopOfPage:
self.__useLine=1
if searchdumpBottomOfPage:
self.__useLine=0
if self.__useLine == 1:
self.trimmedLines = self.trimmedLines + line + "\n"
return (self.trimmedLines)
'dictionaried'バージョンでは、セッターに変数を設定したいと思います。
def siteDetails():
baseDict = {'topRegex':'''re.compile(r'(<!--make_database header end-->)')''', 'tailRegex':'''re.compile(r'(<!--make_database footer start-->)')'''}
return baseDict
コンパイルされた正規表現にアクセスします。
def TopnTail(self,line):
topRegEx = baseDict['topRegex']
tailRegEx = baseDict['tailRegex']
searchdumpTopOfPage = topRegEx.search(line)
searchdumpBottomOfPage = tailRegEx.search(line)
if searchdumpTopOfPage:
self.__useLine=1
if searchdumpBottomOfPage:
self.__useLine=0
if self.__useLine == 1:
self.trimmedLines = self.trimmedLines + line + "\n"
return (self.trimmedLines)
しかし、これはエラーをスローします:
line 35, in TopnTail
searchdumpTopOfPage = topRegEx.search(line)
AttributeError: 'str' object has no attribute 'search'
私が推測していることは、それが実際には正規表現オブジェクトを作成していないが、それでも文字列を渡していることを意味します。
私はおそらくここで3つの基本的なルールを破っていることに感謝します...しかしそれを機能させる方法についての提案は素晴らしいでしょう...(また、クラスと辞書の両方で初めて遊ぶ...だから私が本当にめちゃくちゃになりました!)