我正在搜索文本以提取一些数据,我需要在没有找到任何内容时处理这个案例:
items = {'item_1':['----']*len(some_text),
'item_2':['----']*len(some_text),
'item_3':['----']*len(some_text)]
for i, data in enumerate(some_text):
try:
items['item_1'][i] = re.findall('regex_1',data)[0]
except (IndexError):
pass
try:
items['item_2'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
try:
items['item_3'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
我这样做而不是这样:
for i, data in enumerate(some_text):
try:
items['item_1'][i] = re.findall('regex_1',data)[0]
items['item_2'][i] = re.findall('regex_2',data)[0]
items['item_3'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
因为在最后一种情况下,如果只有一个搜索失败,我将丢失所有数据,但我重复了很多代码。
编辑。
我的预期结果是大多数项目都是dictonary。
例如:if:
item_1是地址
item_2是名称
item_3是一个calification
如果在搜索地址时发生异常,我仍然希望能够获得名称和校准。我也不想处理异常,所以如果需要我可以发出“未找到”这样的消息
答案 0 :(得分:1)
我认为避免重复代码的方法是使用循环。首先,将您的字典键和正则表达式对打包成可迭代的东西,然后循环对。这是使用字典作为键和正则表达式的看法(但是2元组的列表也可以正常工作):
key_regex_dict = {'item_1': 'regex_1', 'item_2': 'regex_2', 'item_3': 'regex_3'}
for i, data in enumerate(some_text):
for key, regex in key_regex_dict.items():
try:
items[key][i] = re.findall(regex, data)[0]
except IndexError:
pass