Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解析器脚本布局_Python_Parsing - Fatal编程技术网

Python解析器脚本布局

Python解析器脚本布局,python,parsing,Python,Parsing,我正在编写一个简单的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解析器,在其中我循环文件中的每一行,如果满足正确的条件,则进一步处理它。我短暂的开始:

    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


谢谢!=)

首先,运行两次匹配是多余的-相反,运行它,存储结果,然后分支:

m = re.match(regex.new_round, hh_line)
if m:
    # ...
接下来,如果您有一组regex->处理组合,您可以改为对regex->function映射进行dict,然后对其进行迭代:

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)
def过程(数据):
# ...
def过程_b(数据):
# ...
正则表达式到进程={
“regex_a”:进程_a,
“regex_b”:进程,
}
对于中的hh_行:
对于regex,在regex_to_process.iteritems()中处理:
m=重新匹配(正则表达式,hh_行)
如果m:
过程(hh_线)

首先,运行两次匹配是多余的-相反,运行它,存储结果,然后分支:

m = re.match(regex.new_round, hh_line)
if m:
    # ...
接下来,如果您有一组regex->处理组合,您可以改为对regex->function映射进行dict,然后对其进行迭代:

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)
def过程(数据):
# ...
def过程_b(数据):
# ...
正则表达式到进程={
“regex_a”:进程_a,
“regex_b”:进程,
}
对于中的hh_行:
对于regex,在regex_to_process.iteritems()中处理:
m=重新匹配(正则表达式,hh_行)
如果m:
过程(hh_线)

是的,我想是的。=)谢谢谢谢,这看起来很好——但还有一个问题:为什么我不能在这个循环中访问ex.中的m.group(“title”)?当我在正则表达式中定义了标签时。。但是我可以看到它们都使用groupdict()。您使用的是
(?Pexpression)
语法,对吗?不确定-你能显示更多的代码吗?没错。真的没有什么可以展示的了,但是分组是反常的。第一个正则表达式包含6-7个组,都带有标签。第二个正则表达式包含3个组,当我试图打印任何高于3的组时,它失败了。为什么?请记住,每个正则表达式的循环内容都在运行-因此,如果您尝试查看存在于一个正则表达式中但不存在于另一个正则表达式中的组,它将在第二个正则表达式的迭代中失败。是的,我想是的。=)谢谢谢谢,这看起来很好——但还有一个问题:为什么我不能在这个循环中访问ex.中的m.group(“title”)?当我在正则表达式中定义了标签时。。但是我可以看到它们都使用groupdict()。您使用的是
(?Pexpression)
语法,对吗?不确定-你能显示更多的代码吗?没错。真的没有什么可以展示的了,但是分组是反常的。第一个正则表达式包含6-7个组,都带有标签。第二个正则表达式包含3个组,当我试图打印任何高于3的组时,它失败了。为什么?请记住,循环内容是为每个正则表达式运行的-因此,如果您尝试查看存在于一个正则表达式中但不存在于另一个正则表达式中的组,那么它将在第二个正则表达式的迭代中失败。