0
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,因为我基于";". 有什么更好的方法来做到这一点?

谢谢!

4

1 回答 1

3

假设键名不包含分号似乎是合理的。如果这不是真的,那么正如菲利普指出的那样,这种语言是模棱两可的。但如果不是,您可以使用前瞻来判断哪个;是分隔符:它必须后跟一系列不是;or的东西,=然后是一个=or 字符串结尾:

>>> 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')]
于 2012-07-12T23:49:33.997 回答