这是我的问题:
考虑[{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的方式获得它?
答案 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}}']]