簡體   English   中英

在Python循環中重復使用正則表達式的最有效方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM