当您在文件中迭代数百行时,在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)
如果你只是一遍又一遍地使用这个相同的正则表达式,你不需要直接编译它.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).