提取一个包含在2 str之间的字符串

时间:2014-05-20 11:22:24

标签: 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"], [...]....]

形式的列表中

以任何方式以pythonic的方式获得它?

2 个答案:

答案 0 :(得分:1)

使用.*使<{1}}模式不正确。

例如,

.*?

这里是&#34;贪心&#34;匹配:

In [44]: s
Out[44]: '{foo} {bar} {baz}'

现在&#34; nongreedy&#34;比赛。请注意添加的In [45]: re.findall(re.escape("{")+"(.*)"+re.escape("}"), s) Out[45]: ['foo} {bar} {baz']

?

有关贪婪和非贪婪匹配之间区别的更多信息,请参阅https://docs.python.org/2/howto/regex.html#greedy-versus-non-greedy

答案 1 :(得分:0)

它并不优雅,但如果你确定要有一个完全如你所示的字符串,你可以这样做:

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}}']

如果您更喜欢带有字符串的列表列表(如问题中所述),请使用:

l = [[d + "}"] for d in s.split("}, ")]

它将生成:

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