匹配C的多行预处理器语句的正则表达式

2024-06-30 15:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要匹配多行预处理器的语句,例如:

#define max(a,b) \
       ({ typeof (a) _a = (a); \
           typeof (b) _b = (b); \
         _a > _b ? _a : _b; })

关键是要匹配#define和最后一个})之间的所有内容,但我仍然不知道如何编写regexp。我需要它来使用“re”模块在Python中工作。在

有人能帮帮我吗?在

谢谢


Tags: 模块re内容语句处理器max关键regexp
3条回答

这应该做到:

r'(?m)^#define (?:.*\\\r?\n)*.*$'

(?:.*\\\r?\n)*匹配以反斜杠结尾的零行或多行,然后.*$匹配最后一行。在

我认为上述解决方案可能不适用于:

#define MACRO_ABC(abc, djhg) \
do { \
  int i; \
  /*
   * multi line comment 
   */ \
  (int)i; \
} while(0);

我想这样的方法会奏效的:

m = re.compile(r"^#define[\s\S]+?}\)*$", re.MULTILINE)
matches = m.findall(your_string_here)

这假设您的宏都以“}”结尾,结尾处有一个可选的“)”。在

相关问题 更多 >