Python 通过使用字符串创建一个列表

Python 通过使用字符串创建一个列表,python,python-3.x,re,Python,Python 3.x,Re,出于某种原因,我有一个描述正则表达式列表的文本文件 RegexRemove = [ 'OC1.*','OC2.*','-UC.*','EG[0-9]{4,6}.*','_t[0-9]{0,2}\.[0-9]{0,2}$' ] RegexReplace = [ ['LA.*','LA'],['IF.*', 'IF'],['BH.*', 'BH'],['DP.*', 'DP'] ] 我喜欢以字符串形式读入这些行,并将它们转换为文本文件中描述的列表 这行代码类似于定义列表的源代码

出于某种原因,我有一个描述正则表达式列表的文本文件

RegexRemove      = [ 'OC1.*','OC2.*','-UC.*','EG[0-9]{4,6}.*','_t[0-9]{0,2}\.[0-9]{0,2}$' ]

RegexReplace     = [ ['LA.*','LA'],['IF.*', 'IF'],['BH.*', 'BH'],['DP.*', 'DP'] ]
我喜欢以字符串形式读入这些行,并将它们转换为文本文件中描述的列表

这行代码类似于定义列表的源代码,但它们是更大文本文件的一部分,不能作为python读取和解释

我试图通过替换和拆分字符串来转换它们,但我总是遇到麻烦,因为逗号用作拆分的分隔符,也是正则表达式的一部分。
我是否可以只读入包含“Regex”的行,并使用一些奇特的函数将它们转换为此处描述的列表?

您可以使用
eval
将字符串解析为python对象:

items = eval('[1,2,4]')
print(type(items),len(items), items) # output: <class 'list'> 3 [1, 2, 4]

items=eval(“[1,2,4]”)
打印(类型(项目)、透镜(项目)、项目)#输出:3[1,2,4]
提取想要的行(显然您已经完成了),在“=”字符上拆分它们,然后将第二部分传递给
ast.literal\u eval()


你是在问如何解析文本吗?看起来它们是用python代码编写的,所以我的第一个想法是导入。啊,错过了关于它是非python文档的一部分的部分。有eval,或者你可以用你自己的正则表达式解析它。文本文件来自可靠的来源吗?您能否排除有人使用此文件输入恶意代码的可能性?如果是这样,您可以尝试使用
eval
语句来执行它的部分内容:
l=“RegexRemove=['OC1.*'、'OC2.*'、'-UC.*'、'EG[0-9]{4,6}.'、'ut[0-9]{0,2}.[0-9]{0,2}$'”;x=eval(l.split(“=”[1])
文本是可靠的!它只能由少数用户编辑colleagues@LydiavanDyke此处不需要
eval()
-
ast.literal\u eval()
将正确重建列表,而不会出现安全问题。回答错误。这里不需要,很好。我会尽量记住这一点,以防将来遇到问题。
>>> import ast
>>> s = "[ 'OC1.*','OC2.*','-UC.*','EG[0-9]{4,6}.*','_t[0-9]{0,2}\.[0-9]{0,2}$' ]"
>>> ast.literal_eval(s)
['OC1.*', 'OC2.*', '-UC.*', 'EG[0-9]{4,6}.*', '_t[0-9]{0,2}\\.[0-9]{0,2}$']
>>>