我正在尝试解析以下字符串
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').......]
非常感谢任何帮助
答案 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')]