代码之家  ›  专栏  ›  技术社区  ›  Greg

在Python循环中重复使用正则表达式最有效的方法是什么?

  •  2
  • Greg  · 技术社区  · 16 年前

    当您在一个文件中迭代数百行时,在Python中运行正则表达式最有效(也是最不有效)的方法是什么?

    具体来说,下面的表格是不是不好?

    for line in file:
      data = re.search('(\d+\.\d+)\|(-\d+\.\d+)\|(.*?)\|(.*?)\|(\d+:\d+\s+\w+)\sTO\s(.*?)',line)
      one = data.group(1)
      two = data.group(2)
      three = data.group(3)
      four = data.group(4)
      five = data.group(5)
      six = data.group(6)
      # do the magic...
    
    3 回复  |  直到 16 年前
        1
  •  6
  •   Jed Smith    16 年前

    如果您只是一遍又一遍地使用同一个正则表达式,则不需要直接编译它。 http://docs.python.org/release/2.6.5/library/re.html#re.compile

    传递给re.match()、re.search()或re.compile()的最新模式的编译版本被缓存,因此一次只使用几个正则表达式的程序不必担心编译正则表达式。

    不过,我非常建议你不要像现在这样做下面的作业。尝试以下操作:

    for line in file:
        data = re.search('(\d+\.\d+)\|(-\d+\.\d+)\|(.*?)\|(.*?)\|(\d+:\d+\s+\w+)\sTO\s(.*?)',line)
        groups = data.groups()
        # do the magic...
    

    MatchObject.groups() 返回匹配中所有组的元组,将值传递给不参与匹配的组 groups() (所述值默认为 None ).

        2
  •  3
  •   robert vano    16 年前

    rx = re.compile( '(\d+\.\d+)\|(-\d+\.\d+)\|(.*?)\|(.*?)\|(\d+:\d+\s+\w+)\sTO\s(.*?)' )
    for line in file:
      data = re.search(rx,line)
      one = data.group(1)
      two = data.group(2)
      three = data.group(3)
      four = data.group(4)
      five = data.group(5)
      six = data.group(6)
    
        3
  •  1
  •   Paddy3118    16 年前

    除非速度是一个问题,那么你可能只想去你觉得舒服的阅读,这是工作。