代码之家  ›  专栏  ›  技术社区  ›  dgrat

阅读并用Python替换C#ifndef/#endif enclosure

  •  0
  • dgrat  · 技术社区  · 6 年前

    #pragma once 在一个巨大的工程中。

    #ifndef FOO_H
    #define FOO_H
    
    class foo
    {
    };
    
    #endif
    

    我想知道,有什么可靠的策略可以取代 #ifndef #define #endif 布洛克?正则表达式仍然适用于此吗?我觉得解析顶部 #define )底部(用于 #endif

    1 回复  |  直到 6 年前
        1
  •  1
  •   FHTMitchell    6 年前

    你可以用正则表达式

    import re
    
    s = '''
    #ifndef FOO_H
    #define FOO_H
    
    class foo
    {
      // ensure regex is greedy
    #ifndef A
    #define A
    #endif
    };
    
    #endif'''
    
    regexpr = re.compile(r'#ifndef [A-Za-z_]+\s+#define [A-Za-z_]+\s+(.*)\s+#endif',
                       re.DOTALL)
    
    newf = '#pragma once\n\n{}'.format(regexpr.search(s).group(1))
    

    #pragma once
    
    class foo
    {
      // ensure regex is greedy
    #ifndef A
    #define A
    #endif
    };