Python 提取2个str之间包含的str

Python 提取2个str之间包含的str,python,string,split,Python,String,Split,我的问题是: 考虑形式为[{val1:false,test2:0.1},{val2:false,test2:0.2},{val3:false,test2:0.1},…]的str 我想在str列表中提取“{}”中包含的部分 我试过: re.findall(re.escape("{")+"(.*)"+re.escape("}"), "chosen str") 但这似乎只有在出现一个“{”+…+“}”时才起作用,这意味着在本例中,它只返回一个包含1个str的列表,与输入的表单类似,[{去掉了两边。

我的问题是: 考虑形式为
[{val1:false,test2:0.1},{val2:false,test2:0.2},{val3:false,test2:0.1},…]的str
我想在str列表中提取“
{}
”中包含的部分

我试过:

re.findall(re.escape("{")+"(.*)"+re.escape("}"), "chosen str")
但这似乎只有在出现一个“{”+…+“}”时才起作用,这意味着在本例中,它只返回一个包含1个str的列表,与输入的表单类似,[{去掉了两边。 为了清楚起见,我只想将输入建议的表单收集在表单列表中
[[“val1:false,test2:0.1”],[…],[…]


有什么方法可以通过pythonic的方式获得它吗?

使用
*?
使
*
模式不冻结

比如说,

In [44]: s
Out[44]: '{foo} {bar} {baz}'
以下是“贪婪”匹配:

现在“nongreedy”匹配。注意添加的

In [46]: re.findall(re.escape("{")+"(.*?)"+re.escape("}"), s)
Out[46]: ['foo', 'bar', 'baz']

有关贪婪匹配和非贪婪匹配之间区别的更多信息,请参阅。

这并不优雅,但如果您确实拥有与所示完全相同的字符串,则可以执行以下操作:

s = "[{val1:false, test2:0.1}, {val2:false, test2:0.2}, {val3:false, test2:0.1}]"
s = s[1:-1] # remove leading "[" and ending "]"
l = [d + "}" for d in s.split("}, ")]
print l
上一步将生成:

['{val1:false, test2:0.1}', '{val2:false, test2:0.2}', '{val3:false, test2:0.1}}']
[['{val1:false, test2:0.1}'], ['{val2:false, test2:0.2}'], ['{val3:false, test2:0.1}}']]
如果您喜欢带字符串的列表(如您问题中所述),请使用:

它将产生:

['{val1:false, test2:0.1}', '{val2:false, test2:0.2}', '{val3:false, test2:0.1}}']
[['{val1:false, test2:0.1}'], ['{val2:false, test2:0.2}'], ['{val3:false, test2:0.1}}']]

我想,
{(+?)}
就可以了。你想在每个列表中都有一个字符串列表吗?你的意思是获得[“val1:false,test2:0.1”,“v2:1,v3:2”,…]吗?如果你不需要正则表达式,你可以使用我下面的答案。看起来“贪婪”匹配正是我所需要的感谢“非贪婪”匹配很抱歉,除非我有直截了当的功能,否则我计划实现像你这样的完整代码。无论如何,谢谢你的帮助