0

我为新手的问题道歉,但这是我第一次使用课程。我正在尝试创建的类旨在对字典中的所有键和值执行正则表达式查找和替换。具体的查找和替换是在实例化时定义的。

我有两个问题。第一个问题是类的每个实例都需要接受一个新字典。我不清楚如何创建一个接受通用字典的类,我可以在创建实例时指定它。第二个问题是我的课程根本不起作用。我TypeError: expected string or buffer在类行中收到错误消息v = re.sub(self.find,self.replace,v)

我要创建三个实例,每个输入字典一个:input_iter1input_iter2input_iter3

以下是类:

class findreplace:
    values = []
    keys = []
    def __init__(self, find, replace):
        self.find = find
        self.replace = replace
    def value(self):
        for k,v in input_iter1.items():
            v = re.sub(self.find,self.replace,v)
            findreplace.values.append(v)
    def key(self):
        for k,v in input_iter1.items():
            k = re.sub(self.find,self.replace,k)
            findreplace.keys.append(k)

以下是实例:

values1 = findreplace('[)?:(]','')
values1.value()
values2 = findreplace(r'(,\s)(,\s)(\d{5})({e<=1})',r'\2\3')
values2.value()
keys1 = findreplace(r'(?<=^)(.+)(?=$)',r'(?:\1)')
keys1.key()
keys2 = findreplace(r'(?=$)',r'{e}')
keys2.key()

print values
print keys

如果有人对我如何解决这两个问题有任何见解,我将不胜感激。谢谢!

4

2 回答 2

2

首先,Python 2 的类应该这样开始:

class Foo(object):

否则,你会得到一个“老式课程”,这是一种没有人使用的古老硬壳。

此外,Python 中的类名通常以CamelCase.

其次,不要使用可变值(如列表!)作为类属性,就像您在这里使用keysand所做的那样values。它们将在您班级的所有实例中共享!看起来您甚至都知道这一点,因为您findreplace.keys直接引用,但是将特定于实例的值存储在这样的类属性中是没有意义的。

但是,最重要的是:为什么这是一个类?afindreplace 代表什么?如果它只是一个函数,看起来会更清楚。


要回答您的实际问题:

  1. 你传入一个字典,就像你传入findand一样replace。向 中添加另一个参数__init__,并在构造类时传递另一个参数。

  2. 据推测,您得到的是TypeError因为字典中的一个值不是字符串,并且您只能对字符串执行正则表达式。

于 2013-01-21T05:11:50.933 回答
1

您对 input_iter 字典的定义在哪里?他们看起来怎么样?您的错误表明您的 dicts 的值不是字符串。

于 2013-01-21T05:10:38.917 回答