Python正则表达式并不是全部打印

时间:2014-05-05 09:43:07

标签: python regex parsing

我正在尝试解析以下字符串

content = "ACC=OFF,Latitude = 01 15 30.20S Longitude = 036 47 10.83E,Speed = 0.00Km/h,Odometer = 36.477Km,2014-05-05,05:54"

如下:

print re.findall(r'([\w\.-]+)=([\w\.-]+)', content)

输出结果为:

[('ACC', 'OFF')]

但预期的输出应为:

[('ACC', 'OFF'),('Latitude','01 15 30.20S'),('Longitude','036 47 10.83E'),('Speed','0.00Km/h'),('Odometer','36.477Km').......]

非常感谢任何帮助

4 个答案:

答案 0 :(得分:5)

记住空白和/

In [13]: re.findall(r'([\w\.-]+)\s*=\s*([\w\.\s/-]+)', content)
Out[13]: 
[('ACC', 'OFF'),
 ('Latitude', '01 15 30.20S Longitude '),
 ('Speed', '0.00Km/h'),
 ('Odometer', '36.477Km')]

如您所见,Longitude无法识别,因为它被视为Latitude值的一部分。

答案 1 :(得分:2)

Latitude = 01 15 30.20S

等号周围有空格。在您的正则表达式中包含此内容。

答案 2 :(得分:1)

你应该只是你的正则表达式:

content = 'ACC=OFF,Latitude = 01 15 30.20S Longitude = 036 47 10.83E,Speed = 0.00Km/h,Odometer = 36.477Km,2014-05-05,05:54'
print re.findall(r'(.*?)\s?=\s?(.*?),', s)

你的正则表达式不匹配的问题是因为你的=和你想要匹配的字符串中都有空格。上面显示的正则表达式将起到作用

答案 3 :(得分:1)

这给出了问题中给出的预期输出。 (.....最后表明日期和时间也应该包括在内,但是如何?)

>>> re.findall(r'([\w\.-]+)\s*=\s*([\d\.\s/-]*[\w./-]*)', content)
[('ACC', 'OFF'), ('Latitude', '01 15 30.20S'), ('Longitude', '036 47 10.83E'), 
 ('Speed', '0.00Km/h'), ('Odometer', '36.477Km')]