my_string = "Value1=Product Registered;Value2=Linux;Value3=C:5;C++:5;Value4=43;"
我使用的是以下正则表达式:
tokens = re.findall(r'([^;]+)=([^;]+)', line, re.I)
我需要解析value1,value2等,并将它们的值放入数据库中。例如,我需要为"C:5;C++:5"
存储value3
- 但是使用上面的正则表达式我只能存储C:5
,因为我会根据";"
进行解析。什么是更好的方法呢?
谢谢!
答案 0 :(得分:3)
假设键名不包含分号似乎是合理的。如果不是这样,那么菲利普指出语言含糊不清。但如果没有,您可以使用前瞻来判断哪个;
是分隔符:它必须跟随一系列不是;
或=
的事物,然后要么是=
,要么是字符串结尾:
>>> my_string = "Value1=Product Registered;Value2=Linux;Value3=C:5;C++:5;Value4=43;"
>>> r = re.compile(r'([^;]+)=([^=]+);(?=[^;=]*(?:=|$))')
>>> r.findall(my_string)
[('Value1', 'Product Registered'),
('Value2', 'Linux'),
('Value3', 'C:5;C++:5'),
('Value4', '43')]