使用正则表达式解析字符串?

时间:2012-07-12 23:36:08

标签: python regex

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,因为我会根据";"进行解析。什么是更好的方法呢?

谢谢!

1 个答案:

答案 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')]