2010-08-24 32 views
0

我正在編寫一個簡單的Python解析器,在這裏我循環遍歷文件中的每一行,並在滿足正確條件時進一步提出它。我的短的啓動:Python解析器腳本佈局

def identify(hh_line): 
     if(re.match(regex.new_round, hh_line)): 
      m = re.match(regex.new_round, hh_line) 
      # insert into psql 

     ... 

     if(re.match... 

..和我想知道什麼是接近這個任務的最佳方式(實踐),因爲這是我第一次寫的Python。

謝謝! =)所有的

回答

3

首先,它是多餘的運行兩次比賽 - 相反,運行它,存儲結果,並岔開的是:

m = re.match(regex.new_round, hh_line) 
if m: 
    # ... 

接下來,如果你有一大堆正則表達式 - >處理組合,你可以改爲正則表達式 - >函數映射,然後重複它:

def process_a(data): 
    # ... 

def process_b(data): 
    # ... 

regex_to_process = { 
    'regex_a': process_a, 
    'regex_b': process_b, 
} 

for hh_line in <file object>: 
    for regex,process in regex_to_process.iteritems(): 
     m = re.match(regex, hh_line) 
     if m: 
      process(hh_line) 
+0

是的,我估計它是。 =)謝謝! – 2010-08-24 02:55:22

+0

謝謝,這看起來不錯 - 但只是一個後續行動:爲什麼我不能在前例訪問m.group('title')?在那個循環中?當我在正則表達式中定義了lables時,但是我可以使用groupdict()來查看它們。 – 2010-08-24 03:31:16

+0

您正在使用'(?P 表達式)'語法,對嗎?不知道 - 你能展示更多的代碼嗎? – Amber 2010-08-24 03:42:59