首页 新闻 会员 周边 捐助

从配置文件读取正则表达式,读取后类型是字符串

0
[已解决问题] 解决于 2019-03-07 09:06

从配置文件读取到正则表达式,但是读取之后的类型是字符串,也就不具有正则查找的效果了...
例如配置文件的内容是这样的:

pattern_dict = ['re.compile(.*?日历\(.*?\))',
                're.compile(pattern[, flags]']

然后读出来是're.compile(.*?期货交易所交易日历\(.*?\))',类型是str...


原始需求:
从网上抓很多文章,但是包含特定字符的数据就不要了(例如标题包含“日历”),想到的方案是一个配置文件专门放正则表达式(正则表达式就类似“re.compile(.?日历(.?))”),然后每采集一篇文章,就读取一次配置文件,把里面的过滤条件都过一遍...

 
cc = importlib.import_module('robot.clear_data').pattern_dict
        for cs in cc:
            print('正则表达式=============' + str(cs))
            if cs.search(item['title']) not in item['title']: #这里就使用正则表达式的Search,如果title能和正则匹配上,就判断一下
                return item
会发光的主页 会发光 | 菜鸟二级 | 园豆:258
提问于:2019-03-06 17:28
< >
分享
最佳答案
0

配置里肯定只能存字符串,就算可以,你也别存代码;正则匹配的类型就那么多,你取出来之后,最多是穷举出来,一个个组合然后再去匹配。

奖励园豆:5
三人乐乐 | 老鸟四级 |园豆:4823 | 2019-03-06 17:37

哦,意思就是,我在配置文件只写表达式,不写用哪种匹配类型,然后匹配类型放到外面写死?

会发光 | 园豆:258 (菜鸟二级) | 2019-03-06 17:41

@会发光: 对,放到外面

三人乐乐 | 园豆:4823 (老鸟四级) | 2019-03-06 17:50

@三人乐乐: 

配置文件只写表达式:
pattern_dict = ['.*?期货交易所交易日历\(.*?\)',
                ]

程序处理:
cc = importlib.import_module('robot.clear_data').pattern_dict#获取配置文件里的表达式

        for cs in cc:

            pattern = re.compile(cs) #把表达式放到匹配方法里

            if pattern.search(str(item['title'])) not in item['title']:

                return item

然后报错了...`TypeError: 'in <string>' requires string as left operand, not NoneType`

会发光 | 园豆:258 (菜鸟二级) | 2019-03-06 18:01

@会发光: 这个错误,是说int类型不能在string类型里循环,你找下哪里定义错了

三人乐乐 | 园豆:4823 (老鸟四级) | 2019-03-07 09:44
其他回答(1)
0

你的配置里定义的时候是按字符串定义的, 修改一下就好了.

pattern_dict = ['re.compile(.*?日历\(.*?\))',
                're.compile(pattern[, flags]']

改成

pattern_dict = [re.compile(.*?日历\(.*?\)),
                re.compile(pattern[, flags]]

另外如果配置里正则表达式很多时, 考虑放在模块级别, 在程序启动导入时提前编译完成. 执行时省去现场编译正则这一步.

ABeen | 园豆:251 (菜鸟二级) | 2019-03-13 22:51

放在模块级别啥意思...类么

支持(0) 反对(0) 会发光 | 园豆:258 (菜鸟二级) | 2019-03-14 09:00

@会发光: 让它在导入时执行就可以了.

支持(0) 反对(0) ABeen | 园豆:251 (菜鸟二级) | 2019-03-15 16:14

@ABeen: /捂脸,不太懂...导入时执行是啥概念....

支持(0) 反对(0) 会发光 | 园豆:258 (菜鸟二级) | 2019-03-15 16:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册