[英]What is the most efficient way to repeatedly use regular expressions in a Python loop?
當您在文件中迭代數百行時,在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...
如果你只是一遍又一遍地使用這個相同的正則表達式,你不需要直接編譯它。 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
)。
在循環之前保存正則表達式。
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)
除非速度是一個問題,否則你可能想要閱讀你喜歡閱讀的內容,哪些有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.