接下来是我编写的正则表达式,用于匹配C/C++代码中的多行预处理器宏.我绝不是一名正则表达大师,所以我欢迎任何关于我如何能做得更好的建议.
这是正则表达式:
\s*#define(.*\\\n)+[\S]+(?!\\)
Run Code Online (Sandbox Code Playgroud)
它应该匹配所有这些:
#define foo(x) if(x) \
doSomething(x)
Run Code Online (Sandbox Code Playgroud)
但只有一部分(不应该匹配下一行代码:
#define foo(x) if(x) \
doSomething(x)
normalCode();
Run Code Online (Sandbox Code Playgroud)
并且也不应该匹配单行预处理器宏.
我很确定上面的正则表达式有效 - 但正如我所说,可能有更好的方法,我想有办法打破它.任何人都可以建议吗?
这是一个简单的测试程序,我敲了一下:
#!/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)
Run Code Online (Sandbox Code Playgroud)
我用过的:
r"^[ \t]*#define(.*\\\n)+.*$"
Run Code Online (Sandbox Code Playgroud)
非常类似于使用的一种用法,改变:
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |