使用python're'模块匹配多个字符串

时间:2013-11-02 20:48:56

标签: python regex

我的格式简单,C语法类似,但非常简单(少于10个可能的函数)。他们的格式不断定义。所以我决定不使用复杂的解析器,比如pycparser等,而是使用're'模块解析事物(只需要一些信息)。 所以,如果我有:

# id = AddStrucEx (-1, "struct_MTRR", 0);

然后我解析它:

mkstruct_re = re.compile("""
    (?m)                                # Multiline
    ^[ \t]*id[ \t]*=[ \t]*AddStrucEx[ \t]*\(
    [ \t]*-1[ \t]*,[ \t]*
    "(?P<sname>.*)"                     # Structure name
    [ \t]*\,[ \t]*0
    [ \t]*\);[ \t]*$
""", re.VERBOSE)
mkstruct_group_name = dict([(v,k) for k,v in mkstruct_re.groupindex.items()])
mkstruct = mkstruct_re.finditer(idc)
for match in mkstruct :
    s = Struct()
    for group_index,group in enumerate(match.groups()) :
        if group :
            if mkstruct_group_name[group_index+1] == "sname" :
                s.name = group
    structs.append(s)

但我需要做的是解析这样的事情:

# Case 1: not nested structures
# =============================
# id = GetStrucIdByName ("struct_header");
# mid = AddStructMember(id,"BCPNV", 0, 0x5000c500, 0, 7);
# mid = AddStructMember(id,"_", 0X7, 0x00500, -1, 1);
# mid = AddStructMember(id, "BCPNV_size",0X8, 0x004500, -1, 1);

其中“struct_header” - 结构的名称,以及其他 - 其成员。例如,成员1 - 名称“BCPNV”,类型0,大小0x5000c500。 所以我需要用成员填充struct,这里是伪代码:

s = get_struct_by_name("struct_header")
...
member = Member(name, type, size)
s.append(member)

这种模式重复所有文件。所以我需要以某种方式编写正则表达式,它可以将其作为一个多行字符串处理。

0 个答案:

没有答案