我正在尝试将以下类型的字符串转换为Python中的Dictionary。
&
我想使字典像:
'F1=Value1,F2=Value2,F3=[[F4=Value4,F5=Value5]],F6=Value6'
答案 0 :(得分:1)
如果您将继续使用相同的字符串格式,则可以使用复杂的正则表达式来覆盖各种模式。
以下是我预期的几种模式的正则表达式。让我知道这是否解决了您的问题。如果没有,请提供有关解决方案失败之处的详细信息:
编辑以解释
(?=F\d+=\[).*?(\]){2,}(?=|,)
(?=F\d+=\[)
匹配字符串以F开头,具有一个或多个数字,后跟=[
.*?(\]){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})