【问题标题】:Python regex findall not printing allPython正则表达式findall不打印所有
【发布时间】:2014-06-21 13:44:06
【问题描述】:

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

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').......]

任何帮助将不胜感激

【问题讨论】:

  • -1 content 不是一个有效的 python 东西
  • LattitudeLongitude 字段之间没有, 吗?

标签: python regex parsing


【解决方案1】:

记住空格和/

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 值的一部分。

【讨论】:

  • 这与给定的预期输出不匹配 - 可能是因为 OP 的遗漏,也可能不是...
  • @Robin True。但是,如果 a) 值可以包含空格并且 b) 空格用于分隔对,那么就不可能做 OP 想要的。
  • 我会选择“烦人”而不是“不可能”(例如以不同的方式处理 Latitude 案例),但我认为需要指出一个事实:想要的输出 很奇怪。
【解决方案2】:
Latitude = 01 15 30.20S

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

【讨论】:

    【解决方案3】:

    你应该简单地将你的正则表达式改为:

    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)
    

    您的正则表达式不完全匹配的问题是因为您的= 和您想要匹配的字符串中都有空格。上面显示的正则表达式可以解决问题

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-08-13
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        相关资源
        最近更新 更多