在Python循环中重复使用正则表达式最有效的方法是什么?
当您在一个文件中迭代数百行时,在Python中运行正则表达式最有效(也是最不有效)的方法是什么 具体来说,下面的表格是不是很糟糕在Python循环中重复使用正则表达式最有效的方法是什么?,python,regex,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
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...
在循环之前保存正则表达式
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)
如果您只是反复使用同一个正则表达式,则不需要直接编译它 传递给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
)。除非速度是个问题,否则您可能只想阅读自己喜欢的内容,我建议使用data=rx.search(line)
而不是data=re.search(rx,line)
。不需要保存正则表达式。重新缓存已编译的正则表达式,因此每次迭代只保存一次字典查找。@Ned:heh..这对我来说是新闻!:-)Python真的很棒@奈德:不过我相信它只能缓存一定数量的内容。你可以在re.py中读取代码:它可以缓存100个条目。奇怪的是,当缓存达到100个条目时,它只是清除整个缓存并重新开始…或者,如果确实需要变量:one、two、three、four、five、six=data.groups()
这对我的一般Python学习非常有帮助。谢谢你!但值得一提的是,我现在已经对所有报告的实现进行了实验,并且在性能上几乎没有差异。