我为新手问题道歉,但这是我第一次上课。我正在尝试创建的类旨在执行正则表达式查找并替换字典中的所有键和值。在实例化时定义特定的查找和替换。
我有两个问题。第一个问题是类的每个实例都需要接受一个新的字典。我不清楚如何创建一个接受我可以在创建实例时指定的通用字典的类。
第二个问题是我的课程根本不起作用。我在类别行TypeError: expected string or buffer
中收到错误消息v = re.sub(self.find,self.replace,v)
。
我想创建三个实例,每个实例对应一个输入字典:input_iter1
,input_iter2
和input_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
如果有人对如何解决这两个问题有任何见解,我将很高兴听到他们的意见。谢谢!
答案 0 :(得分:2)
首先,Python 2类应该以这种方式开始:
class Foo(object):
否则,你会得到一个“老式的课堂”,这是一个没有人使用的古老硬壳。
此外,Python中的类名通常用CamelCase
编写。
其次,不使用可变值(如列表!)作为类属性,就像您在keys
和values
一样。它们将在您班级的所有实例中共享!看起来你甚至意识到这一点,因为你直接引用findreplace.keys
,但是在类属性中存储特定于实例的值是没有意义的。
但是,最重要的是:为什么这是一个类? findreplace
代表什么?如果它只是一个单一的功能,看起来会更清楚。
回答您的实际问题:
您传入字典就像传入find
和replace
一样。向__init__
添加另一个参数,并在构造类时传递另一个参数。
据推测,你得到的是TypeError
,因为字典中的某个值不是字符串,你只能对字符串执行正则表达式。
答案 1 :(得分:1)
您对input_iter dicts的定义在哪里?他们看起来怎么样?您的错误表明您的dicts值不是字符串。