在Python中将字符串转换为Dict

时间:2018-11-13 04:24:02

标签: python regex string dictionary

我正在尝试将以下类型的字符串转换为Python中的Dictionary。

&

我想使字典像:

'F1=Value1,F2=Value2,F3=[[F4=Value4,F5=Value5]],F6=Value6'

1 个答案:

答案 0 :(得分:1)

如果您将继续使用相同的字符串格式,则可以使用复杂的正则表达式来覆盖各种模式。

以下是我预期的几种模式的正则表达式。让我知道这是否解决了您的问题。如果没有,请提供有关解决方案失败之处的详细信息:

编辑以解释

  1. 第一组(?=F\d+=\[).*?(\]){2,}(?=|,)
    • (?=F\d+=\[)匹配字符串以F开头,具有一个或多个数字,后跟=[
    • .*?(\]){2,}尽可能少地匹配字符串,并且末尾有2个或更多]
    • (?=|,)字符串结尾,或不存在
  2. 第二组F\d.[^,]+
    • 匹配第一组后,很容易找到类似F6=Value6的字符串。因为第一组优先于第二组,所以第二组只能匹配其余字符串。

代码

string = "F1=Value1,F2=Value2,F3=[[F4=Value4,F5=Value5]],F6=Value6,F7=[[[BC],[AC]]]"
import re
resultset = [ele[0] if ele[0] else ele[-1] for ele in re.findall(r"((?=F\d+=\[).*?(\]){2,}(?=|,))|(F\d.[^,]+)",string)]
print({x[:x.find("=")]:x[x.find("=")+1:] for x in resultset})

输出

{'F6': 'Value6', 'F2': 'Value2', 'F3': '[[F4=Value4,F5=Value5]]', 'F1': 'Value1', 'F7': '[[[BC],[AC]]]'}

编辑:因为当字符串为F1=Value1,F2=Value2,F8=[iD=10,ig=12S],F3=[[F4=Value4,F5=Value5]],F6=Value6,F9=[iD=10,ig=12S],F7=[[[BC],[AC]]]时前一个正则表达式不起作用

我将正则表达式更改为((?=F\d+=\[).*?(\])+(?= |,F))|(F\d.[^,]+)。我们需要一个技巧。 在字符串后添加一个空格

string = "F1=Value1,F2=Value2,F8=[iD=10,ig=12S],F3=[[F4=Value4,F5=Value5]],F6=Value6,F9=[iD=10,ig=12S],F7=[[[BC],[AC]]]"
import re
resultset = [ele[0] if ele[0] else ele[-1] for ele in re.findall(r"((?=F\d+=\[).*?(\])+(?= |,F))|(F\d.[^,]+)",string+" ")]
print({x[:x.find("=")]:x[x.find("=")+1:] for x in resultset})