当前位置:  开发笔记 > 编程语言 > 正文

python正则表达式匹配多行预处理器宏

如何解决《python正则表达式匹配多行预处理器宏》经验,为你挑选了1个好方法。

接下来是我编写的正则表达式,用于匹配C/C++代码中的多行预处理器宏.我绝不是一名正则表达大师,所以我欢迎任何关于我如何能做得更好的建议.

这是正则表达式:

\s*#define(.*\\\n)+[\S]+(?!\\)

它应该匹配所有这些:

#define foo(x) if(x) \
doSomething(x)

但只有一部分(不应该匹配下一行代码:

#define foo(x) if(x) \
doSomething(x)
normalCode();

并且也不应该匹配单行预处理器宏.

我很确定上面的正则表达式有效 - 但正如我所说,可能有更好的方法,我想有办法打破它.任何人都可以建议吗?



1> Douglas Leed..:

这是一个简单的测试程序,我敲了一下:

#!/usr/bin/env python

TEST1="""
#include "Foo.h"
#define bar foo\\
    x
#include "Bar.h"
"""

TEST2="""
#define bar foo
#define x 1 \\
    12 \\
    2 \\\\ 3
Foobar
"""

TEST3="""
#define foo(x) if(x) \\
doSomething(x)
"""

TEST4="""
#define foo(x) if(x) \\
doSomething(x)
normalCode();
"""

import re
matcher = re.compile(r"^[ \t]*#define(.*\\\n)+.*$",re.MULTILINE)

def extractDefines(s):
    mo = matcher.search(s)
    if not mo:
        print mo
        return
    print mo.group(0)

extractDefines(TEST1)
extractDefines(TEST2)
extractDefines(TEST3)
extractDefines(TEST4)

我用过的:

r"^[ \t]*#define(.*\\\n)+.*$"

非常类似于使用的一种用法,改变:

    [\ t]为了避免在定义开始时换行.

    我依赖于+贪婪,所以我可以使用一个简单的.*$来获得定义的第一行,而不是以\结尾

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有