最近遇到了需要解析类似这种东西的需求
名称,摘要,主权项+=(育种 or 选育 or (培育 and (种 or 苗)) or 育苗) and (分类号=(A01K61% or A01G33% or A01K63%) or (名称,摘要,主权项+=(刺参 or 海星 or 乌贼 or 扇贝 or 文蛤 or 鲍鱼 or 蛤仔 or 贻贝 or 魁蚶 or 毛蚶 or 缢蛏 or (藻 not (海藻粉 or 硅藻土 or 藻酸)) or 蟹 or 虾 or 水母 or 海螺 or 龟 or (鱼 not (鱼腥草 or 鱼粉 or 鱼雷 or 鱼眼镜头)) or 鲨 or 鲸 or 豚 or 海蛇 or 海狮 or 海豹 or 鳗 or 鲷 or 魨 or 鲆 or 海参 or 海带 or 海胆 or 水产 or 海鲜 or 大鲵 or 贝类 or 种贝 or 养鱼 or 水生动物 or 螺类 or 海蜗牛 or 紫螺 or 钉螺 or 福寿螺 or 角螺 or 田螺 or 玉螺 or 泥螺 or 马蹄螺 or 蝾螺 or 脉红螺 or 香螺 or 金丝螺 or 海螂 or 牡蛎 or 蛤 or 蛏 or 蚌 or 罗非鱼) and (分类号=('A01K67%' or 'A23K1%') or (名称,摘要,主权项+=(养殖 or 饲养 or 栽养 or (养鱼 not 营养鱼) or 饲养 or 混养 or 谐养 or 喂养 or 暂养 or 笼养 or 驯养 or 育种 or 选育 or 培育 or 种苗 or 苗种 or 育苗 or 繁育 or 繁殖 or 饲料 or 饵料) and 分类号=('A01N%' or 'A01P%' or 'A61D19/%' or 'C12M3/%' or 'C12N5/%' or 'C12N15/%')) or 名称=(养殖 or 饲养 or 栽养 or (养鱼 not 营养鱼) or 饲养 or 谐养 or 喂养 or 混养 or 暂养 or 笼养 or 驯养 or 育种 or 选育 or 培育 or 种苗 or 苗种 or 育苗 or 繁育 or 繁殖 or 饲料 or 饵料))))
我们需要将其中的分类号呀、名称呀……等信息提取出来。看着它这一个一个的括号嵌套着,我就想着通过构造一棵树来实。
这是一棵根据需求自己构想的一棵树,root为对应的expression,child为子节点,left/rightSibRelation表示兄弟节点之间的关系
class MyTree:
def __init__(self, value, lrelation=None, rrelation=None):
self.root = value
self.child = []
self.leftSibRelation = lrelation
self.rightSibRelation = rrelation
def insert(self, child_root, lrelation=None, rrelation=None):
self.child.append(MyTree(child_root, lrelation, rrelation))
def delete(self, i):
self.child.pop(i)
def print_tree(self, symbol_num):
print('{}root:{}, leftSibRelation:{}, rightSibRelation:{}, have_child:{}'.format('--' * symbol_num + '>',
self.root,
self.leftSibRelation,
self.rightSibRelation,
self.child != []))
if self.child:
for each in self.child:
each.print_tree(symbol_num + 1)
def get_just_child(self, is_need, content_list: list):
if not self.child:
print('content:{}, flag:{}'.format(self.root, is_need))
content_list.append({'content': self.root, 'flag': is_need})
else:
for each in self.child:
each.get_just_child(is_need, content_list)
def last_second_node(self, condition, nodes, target):
if condition in self.root:
if self.child:
child_num = 0
for each in self.child:
if condition not in each.root:
child_num += 1
if self.leftSibRelation == 'not':
target = -target
if child_num == len(self.child): # 所有儿子都没有关键字
nodes.append({'object': self, 'target': target})
else:
for each in self.child:
if condition in each.root:
each.last_second_node(condition, nodes, target)
else:
if self.leftSibRelation == 'not':
target = -target
nodes.append({'object': self, 'target': target})
def get_type_num(self, target, content_list):
if self.child:
for i, each in enumerate(self.child):
if each.leftSibRelation == 'not' or each.rightSibRelation == 'not':
# print(each.root)
if each.leftSibRelation == 'not':
target = -target
if target == -1:
print('get_type_num: content:{}, type:{}'.format(each.root, target))
else:
print('get_type_num: content:{}, type:{}'.format(each.root, target))
each.get_type_num(target, content_list)
elif each.leftSibRelation == 'and' or each.rightSibRelation == 'and':
# each.get_just_child(target, content_list)
each.get_type_num(target, content_list)
elif each.leftSibRelation == 'or' or each.rightSibRelation == 'or':
# each.get_just_child(target, content_list)
each.get_type_num(target, content_list)
else:
each.get_type_num(target, content_list)
else:
self.get_just_child(target, content_list)
def exp_parse(exp: str, condition):
tree = MyTree(None)
exp = exp.replace('(', '(').replace(')', ')')
if exp.startswith('(') and exp.endswith(')'):
flag = 1
for i in range(1, len(exp)):
if exp[i] == '(':
flag += 1
elif exp[i] == ')':
flag -= 1
if flag == 0:
if i < len(exp) - 1:
root = '({})'.format(exp)
print(root)
print('----------start-----------')
tree.root = root
get_child(root, tree)
break
elif i == len(exp) - 1:
root = exp
print(root)
print('----------start-----------')
tree.root = root
get_child(root, tree)
else:
root = '({})'.format(exp)
print(root)
print('----------start-----------')
tree.root = root
# get_child(root, final_list)
get_child(root, tree)
tree.print_tree(1)
# tree.get_child_by_root('分类号', 0, 1)
# tree.get_child_by_condition('not', 1)
# tree.get_type_num('not', 1)
print('+++++++++++++按条件查询+++++++++++++')
nodes = list()
content_list = list()
tree.last_second_node(condition, nodes, 1)
for node in nodes:
# node.print_tree(1)
print(node['object'].root)
node['object'].get_type_num(node['target'], content_list)
return content_list
# 有时候首尾会出现少括号
def fix(child: str):
t1 = 0
t2 = 0
for c in child:
if c == '(':
t1 += 1
elif c == ')':
t2 += 1
if t1 < t2:
return '(' + child
elif t1 > t2:
return child + ')'
else:
return child
def get_child(root: str, tree: MyTree):
flag = 0
pre_node = -1
for index, s in enumerate(root):
# print(index)
if s == '(':
flag -= 1
if pre_node == -1:
pre_node = index + 1
elif s == ')':
flag += 1
if flag == 0 and index != 0:
child = root[pre_node: index]
if child != '':
if child[0] == '(' and pre_node != 1:
child = child[1:]
print('==- child')
child = fix(child)
print(child)
print('==- middle')
# if child == "(((((名称,摘要,主权项+=(大苏打a) or (名称,摘要,主权项+=(大苏打)) or 分类号=('b60%' or 'b62d%') or 主分类号=('g08g1/133%') or 分类号=('12-16%')) or (申请(专利权)人=(阿松大) or (申请(专利权)人=(阿松大) and 名称,摘要,主权项+=(大苏打)))) not (主分类号=(''a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=() or 名称=(冰箱 or 存储媒体))) or ((主分类号=('a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=( 中国钢铁股份有限公司) or 名称=(冰箱 or 存储媒体)) and (分类号=('b60%') or 主分类号=('g08g1/133%') or 名称,摘要,主权项+=(大) or 名称=(轮胎) or 申请(专利权)人=(卡车)))) not (名称=(汽车游艇 or (饮料 and 运输)) or (名称=(资金) and 摘要=(银行)) or 申请(专利权)人=(哈药) or 主分类号=('sdad') or (分类号=('b61%') and (名称,摘要+=(铁路))) or 名称,摘要,主权项+=(回到家撒)))":
# breakpoint()
operate(child, tree)
print('------------------')
pre_node = index + 1
def is_bracket_valid(expression: str):
flag = 0
for i, s in enumerate(expression):
if s == '(':
flag -= 1
elif s == ')':
flag += 1
if flag == 0:
return True
else:
return False
def get_bracket_num(expression: str):
nums = 0 # 抵消最开始的0
for i, s in enumerate(expression):
if s == '(':
nums += 1
return nums
# 构造树
def operate(string: str, tree: MyTree):
index = []
# string = '(1 or (3)) and (5) not 6'
for i, s in enumerate(string):
if s == 'n' and string[i: i + 3] == 'not':
if is_bracket_valid(string[: i]) and is_bracket_valid(string[i + 1:]):
index.append({'not': i})
# print(string[i: i + 3])
elif s == 'a' and string[i: i + 3] == 'and': # 运算优先级最低的作为主节点
if is_bracket_valid(string[: i]) and is_bracket_valid(string[i + 1:]):
index.append({'and': i})
# print(string[i: i + 3])
elif s == 'o' and string[i: i + 2] == 'or':
if is_bracket_valid(string[: i]) and is_bracket_valid(string[i + 1:]):
index.append({'or': i})
# print(string[i: i + 2])
# print(index)
# "(((((名称,摘要,主权项+=(大苏打a) or (名称,摘要,主权项+=(大苏打)) or 分类号=('b60%' or 'b62d%') or 主分类号=('g08g1/133%') or 分类号=('12-16%')) or (申请(专利权)人=(阿松大) or (申请(专利权)人=(阿松大) and 名称,摘要,主权项+=(大苏打)))) not (主分类号=(''a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=() or 名称=(冰箱 or 存储媒体))) or ((主分类号=('a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=( 中国钢铁股份有限公司) or 名称=(冰箱 or 存储媒体)) and (分类号=('b60%') or 主分类号=('g08g1/133%') or 名称,摘要,主权项+=(大) or 名称=(轮胎) or 申请(专利权)人=(卡车)))) not (名称=(汽车游艇 or (饮料 and 运输)) or (名称=(资金) and 摘要=(银行)) or 申请(专利权)人=(哈药) or 主分类号=('sdad') or (分类号=('b61%') and (名称,摘要+=(铁路))) or 名称,摘要,主权项+=(回到家撒)))"
# 括号数量大于等于1 且 序号列表为空
# 出现原因 ???
if index == [] and get_bracket_num(string) >= 1:
get_child(string, tree)
else:
index_list = []
for ind in index:
if 'not' in ind.keys():
index_list.append(ind['not'])
index_list.append(ind['not'] + 3)
elif 'and' in ind.keys():
index_list.append(ind['and'])
index_list.append(ind['and'] + 3)
elif 'or' in ind.keys():
index_list.append(ind['or'])
index_list.append(ind['or'] + 2)
index_list.append(len(string))
index_list.sort()
last = 0
result_list = list()
for inde in index_list:
# print('====截')
result = string[last: inde]
# print(str(result))
last = inde
if get_bracket_num(result) > 0:
result_list.append(result)
else:
result_list.append(result.replace(' ', ''))
if result_list:
for i, result in enumerate(result_list[::2]):
if len(result_list[::2]) == 1:
tree.insert(result, lrelation=None, rrelation=None)
elif i == 0:
tree.insert(result, lrelation=None, rrelation=result_list[i * 2 + 1])
get_child(result, tree.child[i])
elif i == len(result_list[::2]) - 1:
tree.insert(result, lrelation=result_list[i * 2 - 1], rrelation=None)
get_child(result, tree.child[i])
else:
tree.insert(result, lrelation=result_list[i * 2 - 1], rrelation=result_list[i * 2 + 1])
get_child(result, tree.child[i])
# final_list.append(result_list)
# print(result_list)
# print(demo.replace('=', ':').replace('(', '{').replace(')', '}'))
num = '((1(2)3((4)5(6)))7(((8(9)10(11))12(13))14((15)16)))17(18((19)20(21))22(23))'
s1 = '((分类号=(1) or 名称,摘要,主权项+=((2) and (3))) and (((分类号=(4) or 名称,摘要,主权项+=(5)) and 分类号=(6)) or 名称,摘要,主权项+=((7) and 8))) not (分类号=((9) not (10)) or 名称,摘要,主权项+=(11 or 12 or 13))'
# exp_parse(s1)
# exp_parse('((12)(3(4(5)))6(7))8((9)10(11)((12)not(13)))')
# exp_parse('(9)or(1 or 6)and((1 and 2)not(1 or 3))')
# exp_parse('((1 or (3)) and (5) not 6)')
# exp_parse(num)
# exp_parse(demo2)
# exp_parse('1 not (2 or 3 not (4 and 5 not 6))')
# print(get_bracket_num('((1 or (3)) and (5) not 6)'))
# exp_parse(s1)
# print_tree([['(1 or (3)) ', 'and', ' (5) ', 'not', '6'], ['1', 'or', ' (3)'], ['3'], ['5']], 1, '--')
if __name__ == '__main__':
string = "((名称=(内饰 or 内部装饰 or 仪表板 or 仪表盘 or 顶棚 or 转向盘 or 方向盘 or 地垫 or 防滑垫 or 皮垫 or 座椅 or 车座 or 坐垫 or 靠背 or 安全带 or 头枕 or 靠枕 or 颈枕 or 头部垫枕 or 气囊 or 气袋 or 窗帘 or 地毯 or 车顶 or 屋顶 or 屋盖 or 顶棚 or 顶篷 or 椅背 or 座背 or 座垫 or 地板 or 门内板 or 门板 or 门内护板 or 门内衬板 or 立柱护板 or 脚垫 or 遮阳板 or 遮物帘 or 行李箱 or 遮阳帘 or 遮光帘 or 行李舱 or 发动机舱) or 名称=((照明)and (车内 or 车辆内)) or 主分类号=('b60r13/02%' or 'b60r21/36%' or 'b60r21/232%' or 'b60k35/00%' or 'b60k37/00%' or 'b60k37/02%' or 'b60k37/04%' or 'b60r21/055%' or 'b60n2%' or 'b60r22%' or 'b60j3%' or 'b60r7/05%' or 'b62d1/04%')) and (((((((((((名称,摘要,主权项+=(汽车 or 轿车 or 家用车 or 乘用车 or 两厢车 or 三厢车 or 掀背车 or 旅行车 or 越野车 or 吉普车 or 赛车 or 私家车 or 家庭用车 or 敞篷车 or 跑车 or 多功能车 or 多用途车 or 专用车 or 新能源车 or 电动车 or 電動車 or 电机车辆 or 电动机车 or 混合动力车 or 油电混合车 or 油電混合車 or 清障车 or 消防车 or 邮政车 or 医疗车 or 罐车 or 搅拌车 or 扫路车 or 抢险车 or 运输车 or 自卸车 or 货车 or 挂车 or 客车 or 轻客 or 公交车 or 救护车 or 环卫车 or 电视广播车 or 作业车 or 冷藏车 or 商用车 or 商务车 or 重型车 or 皮卡 or 轻卡 or 微卡 or 微客 or 牵引车 or 客货两用车 or 改装车 or 房车 or 载货车 or 载重车 or 工程车 or 整车 or 机动车 or 卡车 or 旅居车 or 警用车 or 微型车 or 小型车 or 紧凑型车 or 中型车 or 大型车 or 豪华车 or 长头车 or 短头车 or 平头车 or 迎宾车 or 检阅车 or 洒水车 or 扫雪车 or 殡丧车 or 垃圾车 or 垃圾装运车 or 清扫车 or 消防用车 or 特种车 or 特种用途车 or 混凝土泵车 or 矿山车 or 矿用车 or 混凝土搅拌运输车 or 车辆 or 汽配 or 加油车 or 电源车 or 四驱车 or 运钞车) or (名称,摘要,主权项+=(发动机 or 马达 or 引擎 or 燃烧室 or 曲轴 or 气缸 or 汽缸 or 缸体 or 缸盖 or 活塞 or 歧管 or 油底壳 or 油滤清器 or 空气滤清器 or 散热器 or 压力水箱盖 or 机油泵 or 节温器 or 增压器 or 汽油泵 or 安全带 or 刹车 or 转向装置 or 方向盘 or 轮毂 or 轮辋 or 轮辐 or 变速器 or 变速系统 or 减震器 or 减振器 or 悬挂系统 or 前悬挂 or 后悬挂 or 独立悬挂系 or 悬挂装置 or 板弹簧 or 叶片弹簧 or 螺旋弹簧 or 扭杆弹簧 or 油气弹簧 or 平衡杆 or 避震器 or 避振器 or 后视镜 or 导航 or 底盘 or 传动系 or 离合器 or 变速箱 or 变速杆 or gearshift or 速率表 or 超速传动 or 差速器 or 传动轴 or 主动轴 or 四轮驱动 or 压缩机 or 冷凝器 or 电池 or 隔膜 or 负极材料 or 阴极材料 or 正极材料 or 阳极材料 or 电解液 or 电机 or 电动机 or 电控 or 电气控制 or 正时齿轮室盖 or 油箱 or 消声器 or 液力变矩器 or 制动器 or 制动系统 or 制动防抱死 or 制动总泵 or 制动分泵 or 制动油管 or 制动泵 or 制动片 or 制动盘 or 制动蹄 or 制动轮缸 or 制动鼓 or 摩擦片 or 制动钳 or 制动衬块 or 手刹线 or 转向器 or 转向机 or 转向支架 or 转向轴 or 转向桥 or 转向管柱 or 导向装置 or 驱动板 or 油缸 or 雨刮器 or 安全气囊 or 喷油器 or 喷油嘴 or 分动器 or 驱动桥 or 起动机 or 翼子板 or 前围板 or 刮水器 or 电喷 or 电控燃油喷射 or 天窗 or 轮胎 or 胎冠 or 胎肩 or 胎侧 or 胎体 or 胎圈 or 悬架 or 冷却系统 or 前轮 or 后轮 or 司机座 or 客座 or 卤素头灯 or 照明装置 or 信号装置 or 保险装置 or 涡轮增压 or 透平增压 or 涡轮机增压 or 涡轮压气 or 透平压气 or 增压涡轮 or 加压涡轮 or 涡轮加压 or 涡旋增压 or 涡轮式增压 or 涡旋式增压 or 增压器涡轮 or 增压机涡轮 or 涡流增压 or 消音器 or 尾气净化器 or 保险杠 or 柴油机 or 汽油机 or 内燃机 or 轿厢 or 行驶记录仪 or 行车记录仪 or 车用皮革 or 车用影音 or 车用塑料制品 or 车用五金制品 or 车顶盖 or 车门 or 车窗 or 车前钣制件 or 车桥 or 车载电子监控 or 车载安全监测 or 车灯 or 车用仪表 or 车用工程塑料 or 车载故障诊断仪 or 防抱死 or 车载娱乐 or 助力装置)) or 分类号=('b60%' or 'b62d%') or 主分类号=('g08g1/133%') or 分类号=('12-08%' or '12-10%' or '12-13%' or '12-15%' or '12-16%')) or (申请(专利权)人=(汽车 or 自动车株式会社 or 商用车 or 乘用车 or 轮胎 or 上汽 or '特斯拉汽' or 伟巴斯特 or 韦伯斯托 or 韦巴斯托 or 五十铃 or 五十龄 or 弗里特加德公司 or 弗利特加尔公司 or 德尔福 or 德尔菲 or 戴尔菲 or 特尔斐 or 采埃孚 or 汉默斯坦两合有限公司 or 汉默斯坦两合有限公司 or 凯波雷卡罗两合公司 or 伟世通 or 佛吉亚 or 弗雷西亚 or 弗勒西娅 or 福尔西亚 or '埃姆肯技术德国(奥格斯堡)有限责任公司' or '贝特朗-富尔设备公司' or '排放控制技术德国(奥格斯堡)有限公司' or 伯纯特福尔设备股份有限公司 or 伯特兰福里设备有限公司 or 法雷西亚 or 福罗西内 or 福雷奇亚 or 李斯特内燃机及测试设备公司 or avl里斯脱有限公司 or avl利斯特有限责任公司 or fev发动机技术有限公司 or fev发动机技术有限责任公司 or fev电机技术有限公司 or fev有限公司 or 爱德克斯 or 阿基波罗 or 博格华纳 or 阿兹米特 or 一汽 or 二汽 or 客车 or 轿车 or 家用车 or 旅行车 or 越野车 or 吉普车 or 赛车 or 清障车 or 消防车 or 邮政车 or 卡车 or 马自达 or 汽配 or 广东康盈交通设备制造有限公司 or 路之友 or 文灿压铸 or 中南铝车轮 or 安驰铝合金车轮 or 豹王滤芯 or 永力泰车轴 or 富华工程机械 or 陆地方舟 or 标致汽车 or 雪铁龙汽车 or 标致雪铁龙集团 or 南京金龙 or 众泰) or (申请(专利权)人=(三菱 or 康明斯 or 卡明斯 or 电装 or 伊顿 or 易通 or 伊登 or 尹顿 or 爱信 or 锦湖 or 固特异 or 倍耐力 or 皮雷利 or '英得斯特?皮里公司' or 皮莱利 or 卢莱利 or 信耐力轮胎公司 or 邓禄普 or 邓洛普 or 普利司通 or 费尔斯通 or 布里吉斯通 or 普利斯通 or 优科豪马 or 横滨橡胶 or 横滨像胶 or 米其林 or 米凯林 or 米什兰 or 米氏兰 or 米基林 or 米什林 or 米勒 or 三洋 or 松下 or 索尼 or 三星 or 博通 or 宾尼法瑞纳 or 乔治亚罗 or 意迪亚 or 里卡多 or 里查德 or 东机工 or 本田技研 or 博世 or 博施 or 博希 or 施博 or 通用 or 奔驰 or 丰田 or 本田 or 福特 or 大众 or 现代 or 日产 or 戴姆勒 or 长安 or 富士重工 or 铃木 or 宝马 or 雷诺 or 菲亚特 or 克莱斯勒 or 法士特 or 綦江齿轮 or 江森自控 or 约翰逊控制 or 约翰逊控股 or 约翰逊内控 or '约翰逊?康特洛斯股份' or 约翰逊内部调节装置两合公司 or 佛山市邦普循环科技有限公司) and 名称,摘要,主权项+=(汽车 or 轿车 or 家用车 or 乘用车 or 两厢车 or 三厢车 or 掀背车 or 旅行车 or 越野车 or 吉普车 or 赛车 or 私家车 or 家庭用车 or 敞篷车 or 跑车 or 多功能车 or 多用途车 or 专用车 or 新能源车 or 电动车 or 電動車 or 电机车辆 or 电动机车 or 混合动力车 or 油电混合车 or 油電混合車 or 清障车 or 消防车 or 邮政车 or 医疗车 or 罐车 or 搅拌车 or 扫路车 or 抢险车 or 运输车 or 自卸车 or 货车 or 挂车 or 客车 or 轻客 or 公交车 or 救护车 or 环卫车 or 电视广播车 or 作业车 or 冷藏车 or 扫路车 or 商用车 or 商务车 or 重型车 or 皮卡 or 轻卡 or 微卡 or 微客 or 牵引车 or 客货两用车 or 改装车 or 房车 or 载货车 or 载重车 or 工程车 or 整车 or 机动车 or 卡车 or 旅居车 or 警用车 or 微型车 or 小型车 or 紧凑型车 or 中型车 or 大型车 or 豪华车 or 长头车 or 短头车 or 平头车 or 牵引车 or 迎宾车 or 检阅车 or 洒水车 or 扫雪车 or 殡丧车 or 垃圾车 or 垃圾装运车 or 清扫车 or 消防用车 or 特种车 or 特种用途车 or 混凝土泵车 or 矿山车 or 矿用车 or 混凝土搅拌运输车 or 车辆 or 汽配 or 加油车 or 电源车 or 四驱车 or 运钞车)))) not (主分类号=('b61%' or 'a63%' or e% or 'h04%' or 'b41%' or 'c12%' or 'a61%' or 'g09%' or 'd04h5/%' or 'c10%' or 'g06%' or 'g11%' or 'b08%' or 'c07%' or 'a41%' or 'b65f%' or 'a44%' or 'b66%' or 'b43%' or 'b64%' or 'a23%' or 'b28%' or 'g01n33/%' or 'c02%' or 'a45b%' or 'a01%' or 'c09d11/00%' or 'g02c%' or 'b63%' or 'c22%' or 'g08g1/017%' or 'h02g1/02%' or 'd06f%' or 'c30b%' or 'a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=(国家电网公司 or lg电子 or 乐金电子 or 松下知识产权经营株式会社 or 中华电信股份有限公司 or 东洋纺株式会社 or 由田新技股份有限公司 or 国立勤益科技大学 or 中国钢铁股份有限公司) or 名称=(冰箱 or 存储媒体))) or ((主分类号=('h04%' or 'd04h5/%' or 'g06%' or 'g11%' or 'b08%' or 'c07%' or 'a44%' or 'b28%' or 'b66%' or 'b63%' or 'c22%' or 'c30b%' or 'a47%') or 分类号=('h01l29/786%' or 'h01l21/31%') or 申请(专利权)人=(国家电网公司 or lg电子 or 乐金电子 or 松下知识产权经营株式会社 or 中华电信股份有限公司 or 东洋纺株式会社 or 由田新技股份有限公司 or 国立勤益科技大学 or 中国钢铁股份有限公司) or 名称=(冰箱 or 存储媒体)) and (分类号=('b60%') or 主分类号=('g08g1/133%') or 名称,摘要,主权项+=(汽车 or 轿车 or 家用车 or 乘用车 or 两厢车 or 三厢车 or 掀背车 or 旅行车 or 越野车 or 吉普车 or 赛车 or 私家车 or 家庭用车 or 敞篷车 or 跑车 or 多功能车 or 多用途车 or 专用车 or 新能源车 or 电动车 or 電動車 or 电机车辆 or 电动机车 or 混合动力车 or 油电混合车 or 油電混合車 or 清障车 or 消防车 or 邮政车 or 医疗车 or 罐车 or 搅拌车 or 扫路车 or 抢险车 or 运输车 or 自卸车 or 货车 or 挂车 or 客车 or 轻客 or 公交车 or 救护车 or 环卫车 or 电视广播车 or 作业车 or 冷藏车 or 扫路车 or 商用车 or 商务车 or 重型车 or 皮卡 or 轻卡 or 微卡 or 微客 or 牵引车 or 客货两用车 or 改装车 or 房车 or 载货车 or 载重车 or 工程车 or 整车 or 机动车 or 卡车 or 旅居车 or 警用车 or 微型车 or 小型车 or 紧凑型车 or 中型车 or 大型车 or 豪华车 or 长头车 or 短头车 or 平头车 or 迎宾车 or 检阅车 or 洒水车 or 扫雪车 or 殡丧车 or 垃圾车 or 垃圾装运车 or 清扫车 or 消防用车 or 特种车 or 特种用途车 or 混凝土泵车 or 矿山车 or 矿用车 or 混凝土搅拌运输车 or 车辆 or 加油车 or 电源车 or 四驱车 or 运钞车) or 名称=(轮胎 or 车身 or 汽配 or 车轮 or 车用 or 车门 or 车窗) or 申请(专利权)人=(自动车 or 汽车 or 商用车 or 乘用车 or 上汽 or '特斯拉汽' or 一汽 or 二汽 or 客车 or 轿车 or 家用车 or 旅行车 or 越野车 or 吉普车 or 赛车 or 清障车 or 消防车 or 邮政车 or 卡车)))) not (名称=(轮椅车 or 自行车 or 摩托车 or 三轮车 or 折叠车 or 婴儿车 or 童车 or 推车 or 硬币 or 货币 or 便器 or 马桶 or 面部区域检测 or 眼睑 or 面部器官 or 闭眼 or 积木 or 玩具 or 管家机器人 or 船 or 核电站 or 居家机器人 or 楼梯清洁机器人 or 航天 or 人力交通工具 or 购物车 or 课桌 or 暖瓶拖车 or 脚踏车 or 飞机 or 手推货车 or 推车椅 or 自行小卧车 or 列车 or 火车 or 电视 or 卫生间 or 轨道车 or 有轨机车 or 电力机车 or 轻轨 or 手环 or 坩埚 or 自动扫描计数 or 家庭网络 or 虹膜 or 家庭音频 or 视频网络 or 鼠标 or 家居用 or led封装 or 四轮旋转车 or 下水道 or 井盖 or 楼梯爬升轮椅 or 头孢 or 葡萄园 or 交易 or 节目导视 or 洗衣机 or 公路车辆智能监测 or 垃圾桶 or 肿瘤 or 血液 or 电梯 or 餐车清洗机 or 微波炉 or 坦克车 or 踏脚四轮车 or 人力车 or 飞碟 or 飞行器 or 耕种机 or 铁路 or 起重机 or 病毒 or 疾病 or 饲料罐 or 轮椅 or 太阳能电池 or 摄影 or 烧烤 or 婴幼儿床车 or 健身娱乐清洁车 or 儿童小轿车 or 自助餐厅 or 学步车 or 手推清扫车 or 折叠式售货车 or 洗碗机 or 手推售货车 or 展台 or 赛车游戏 or 高尔夫球 or 水下航行 or 爬壁机器人 or 插秧机 or 手车 or 磷尾矿 or 履带 or 燃料补贴 or 智行包 or 乐谱架 or 无人机 or 活动浴缸 or 滑板车 or 血糖 or 农机 or 农用 or 拖拉机 or 托拉机 or 交通控制系统 or 爬壁除锈喷漆机器人 or 兑铁运输车 or 有轨电车 or 儿童救生书包 or 冷水机组 or 树修剪机 or 社会治安 or 混铁车 or 手提式婴儿器具 or 婴儿吐奶 or 森林灭火 or 菜单按钮 or 喷墨 or 油墨 or 邮资 or 乐器 or 售货机 or 贩卖机 or 挖掘机 or 电力系统 or 人字抱杆 or 电力巡检 or 变电站 or 潜水艇 or 汽车艇 or 海运 or 水上 or 汽车游艇 or (饮料 and 运输) or 卫生制品 or 制冰机 or 航空 or 燃气轮机 or 公交客流信息采集 or 洗涤机 or 吸尘器 or 索道 or 泡菜 or 双轮电动车 or 电瓶车 or 农业 or 室内机 or 投影仪 or 室外单元 or 室外机 or 两轮车 or 二轮车 or 轨道载具 or 游戏机 or 压路机 or 油田 or 石灰回转窑 or 烟草 or 档案 or 虫草 or 茶具 or 真空注油机 or 蛋糕 or 叉车 or 升降车 or 天车 or 校园管理 or 路由 or 烟叶 or 租赁 or 药品 or 采购 or 停车场管理 or 广告 or 挖蒜机 or 窃取 or 有足车 or 卡件折扣 or 权限管理 or 借方卡 or 引线系统 or 翻译质量 or 电子商务 or 嘧啶衍生物 or 个人简档 or 虚拟辅助 or 光调制器 or 扫描设备 or 音频取样 or 风力涡轮机 or 停车空间定位器 or 去除的二氧化碳 or rfid阅读器 or 字符识别 or 珠光颜料 or 逐行游戏 or 无线生物持装置 or 多语言系统 or 充氧器 or 开销记帐 or 靶向激励 or 身份防盗 or 资产监控 or 小区电话 or 智能机场 or 地震设备 or 奖励节目 or 畜禽 or 高度确定装置 or 交通光 or 农药 or 中药 or 胶卷 or 风力发电 or 轻型交通车辆 or 碰碰车 or 教学 or 食用菌 or 气瓶车 or 指南车 or 板车 or 独轮车 or 台车 or 压力发电 or 搬运车 or 农具 or 轨道系统车辆 or 轨道车 or 轨道电车 or 轨道电动车 or 轨道上车辆 or 轨道交通 or 轨道卡子 or 轨道吊 or 轨道输送 or 轨道小车 or 轨道类 or 跨骑式电动车 or 跨骑型电动车 or 跨骑型车 or 跨骑式车 or 鞍乘型电动车 or 鞍乘式电动车 or 鞍乘型车 or 鞍乘式车 or 车型识别 or 车型辨识 or 风车 or 鞍座-骑行电动车 or 铁道 or 爬楼车 or 爬楼轮车 or 鞍座型车辆 or 跨坐型车辆) or (名称=(资金) and 摘要=(货币 or 金融 or 银行)) or 申请(专利权)人=(哈药 or 制药 or 餐饮 or 食品 or 阿斯特拉曾尼卡有限公司 or 联合视频制品公司 or 'vid衡器股份有限公司' or 'sms逻辑系统股份有限公司' or 'ig硬纸板科技有限公司' or 马尼托瓦克起重机有限公司 or 佛山市神风航空科技有限公司 or 青岛路博宏业环保技术开发有限公司 or 福建省邵武煤矿机具厂 or 重庆美的通用制冷设备有限公司 or 'tvs电机股份有限公司' or 烟草 or 广东松下环境系统有限公司 or 广州松下空调器有限公司 or 火车 or 童车 or 玩具 or 雅迪 or 捷安特 or 北京牛电科技有限责任公司 or 建德市五星车业有限公司 or 航天 or 航空 or 摩托车 or 浙江中烟工业有限责任公司 or 農機 or 农机 or 辽宁鑫丰矿电设备制造有限公司 or 挖掘机 or 洁具 or 轨道交通 or 船舶 or 丰泰企业管理顾问有限公司 or 上海明燕机械制造有限公司 or 微软技术许可有限责任公司 or 广州东软科技有限公司 or 福建省民爆化工股份有限公司 or '马尔科?帕帕利亚' or 电梯 or 陶瓷 or 医疗 or 佛山市广顺电器有限公司 or 佛山市雅嘉思科技有限公司 or 佛山市南海区广工大数控装备协同创新研究院 or 佛山市日丰企业有限公司 or 药业 or 纸箱 or 佛山伊贝尔科技有限公司 or 佛山市顺德鑫还宝资源利用有限公司 or 佛山市新恒萃材料科技有限公司 or 佛山市精耐机械有限公司 or 广东省水文局佛山水文分局 or 佛山华骐智能科技有限公司 or 佛山市永建电子有限公司 or 舞台设备 or 佛山市劲雄机械有限公司 or 浙江鼎大塑业有限公司 or 轨道车辆 or 轨道系统) or 主分类号=('c07k%' or 'c08b%' or 'b60v%' or 'b62k%' or 'b62c%' or 'b62h%' or 'b62j%' or 'b62l%' or 'b62m%' or 'b60b33/00%' or 'b60l13/03%') or (分类号=('b61%') and (名称,摘要+=(铁路)))) or 名称,摘要,主权项+=(轨道车 or 轨道式车辆 or 轨道交通车辆 or 轻轨 or 地铁 or 铁路车辆 or 高铁 or 履带车辆 or 轨道机车 or 磁悬浮 or 磁性悬浮 or 有轨列车 or 沿轨道行驶 or 在轨道上行驶 or 悬磁浮列 or 磁浮车辆 or 磁性车辆 or 磁铁车辆 or 悬浮列车)))) not (申请(专利权)人=(腾讯 or 广东欧珀移动通信有限公司 or 三星 or 乐金 or 诺基亚 or 微软) or 分类号=('g06f17%'))) not 分类号=('h04n5%' or 'h01l21%' or 'g06f3%' or 'h04n7%' or 'g02f1%' or 'h04l12%' or 'g11b7%' or 'g03g15%' or 'h01l27%' or 'h04w4%' or 'h01l33%' or 'h01s5%' or 'h04m1%' or 'h04b7/26%')) or ((分类号=('h04n5%' or 'h01l21%' or 'g06f3%' or 'h04n7%' or 'g02f1%' or 'h04l12%' or 'g11b7%' or 'g03g15%' or 'h01l27%' or 'h04w4%' or 'h01l33%' or 'h01s5%' or 'h04m1%' or 'h04b7/26%') or 申请(专利权)人=(三星 or 乐金 or 诺基亚 or 微软)) and (名称,摘要+=(车) or 分类号=('b60%' or 'b62d%')))) not (名称,摘要+=(干燥炉 or 篮子 or 电吸烟 or 蜂窝通信 or 数据服务 or 数字蜂窝 or 短消息服务 or 杀虫剂 or 除草剂 or 钞票 or 潜水 or 天然气液化 or 能量牵引 or 蜂窝无线 or 热水器) or 分类号=('h04w24/10%' or 'h04q7/20%' or 'h04q7/22%' or 'c08f10/06%' or 'g06f15/16%' or 'd21h25/00%' or 'c07d311/92%' or 'h04w72/14%' or 'h04m3/53%' or 'h01l29/49%' or 'c03b5/235%' or 'c07d261/04%' or 'c08g64/16%' or 'c08f220%' or 'h04b11%' or 'c07d401%' or 'c25b3%' or 'h04b1/10%' or 'c07d277/28%' or 'h04b7/06%' or 'h04b1/69%' or 'g06f15/00%'))) not (申请日=(17500101 to 18860128) or 公开(公告)日=(17500101 to 18860128)))"
cotnent = exp_parse(string, '分类号')
print(cotnent)