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

Gre*_*reg 2 python regex

当您在文件中迭代数百行时,在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...
Run Code Online (Sandbox Code Playgroud)

JAB*_*JAB 6

如果你只是一遍又一遍地使用这个相同的正则表达式,你不需要直接编译它.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...
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,如果真的需要变量:`一,二,三,四,五,六= data.groups()` (3认同)