当你在文件中迭代数百行时,在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...
答案 0 :(得分: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...
MatchObject.groups()
返回匹配中所有组的元组,未参与匹配的组被分配了传递给groups()
的值(所述值默认为None
)。
答案 1 :(得分:3)
在循环之前保存正则表达式。
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)
答案 2 :(得分:1)
除非速度是一个问题,否则你可能想要阅读你喜欢阅读的内容,哪些有效。