正则表达式如果从config.cfg文件中获取,则将对象转换为字符串

时间:2015-10-20 10:47:38

标签: regex python-2.7 configparser

python文件

import ConfigParser,re

config=ConfigParser.ConfigParser()
with open("temp.cfg",'r') as config_file:
    config.readfp(config_file)


x=[]
x.append(re.compile(r'abc'))
x.append((config.get("ssp",'a')).strip('"'))
print x[0]
print x[1]

配置文件[temp.cfg]

[ssp]
a:re.compile(r'abc')

输出

>>> 
<_sre.SRE_Pattern object at 0x02110F80>
re.compile(r'abc')
>>>

什么&#34;打印x [1]&#34;应该给出的是正则表达式对象,但它似乎是返回字符串。

看起来我没有以正确的方式做到这一点&amp;我无法弄清楚

2 个答案:

答案 0 :(得分:2)

x[1]的输出是由于以下原因:

x.append((config.get("ssp",'a')).strip('"'))

由于config是cfg文件解析器对象,因此您正在访问a部分的ssp选项:

[ssp]
a:re.compile(r'')

显然,字符串 re.compile(r'')

使用eval

x.append(eval((config.get("ssp",'a')).strip('"')))

答案 1 :(得分:0)

您需要将配置文件更改为:

[ssp]
a:abc

然后你可以简单地做(没有丑陋的eval()

x.append(re.compile(config.get("ssp", "a")).strip())

您从配置文件中读取了正则表达式字符串第一个然后使用re.compile()而不是eval()将其转换为代码中的正则表达式对象。这对于维护也更好,因为您在配置文件中保存了大量文本(a:abc而不是每行a:re.compile(r'abc')。)