2010-08-24 49 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