0

我试图在我放在一起的脚本中使参数更易于管理,我想我会将一堆相关项目包装到字典中,并将字典从函数中传递出去。拉出我需要的物体。

其中一项是正则表达式,我正在努力弄清楚如何正确地构造事物以便使其工作。

在我的初始代码中(没有字典)。我正在将正则表达式“硬”编码到解析器中:

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)

在“字典”版本中,我想在 setter 中设置变量:

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 条基本规则......但是任何关于如何使它工作的建议都会很棒......(另外,第一次玩类和字典......所以如果我请放轻松真的搞砸了!)

4

1 回答 1

1

这个怎么样?

baseDict = {
  'topRegex': r'(<!--make_database header end-->)'
}

在你的TopnTail方法中

topRegEx = re.compile(baseDict['topRegex'])

您所拥有的问题是您正在将一个字符串分配给包含'''re.compile(r'(<!--make_database header end-->)')'''. 由于strhas no method search,您会收到错误消息。

仍然编译您的正则表达式并使用返回的对象是有意义的。如果您需要更改正则表达式模式,或者您想动态定义它,将正则表达式的内容拆分为 dict 会有所帮助。

于 2012-11-03T04:03:24.070 回答