Python regex для соответствия многострочному макросу препроцессора

В Netbeans может оказаться полезным создать максимальный размер кучи. Перейдите к Выполнить => Установить конфигурацию проекта => Настроить . В появившемся окне Run перейдите к опции VM Option , заполните -Xms2048m -Xmx2048m. Это может решить проблему размера кучи.

5
задан pavium 9 July 2011 в 08:26
поделиться

2 ответа

Это - простая тестовая программа, которую я поднял:

#!/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)+.*$"

Очень похоже на одно используемое использование, изменения:

  1. [\t] Для предотвращения новых строк в начале определения.
  2. Я полагаюсь + быть жадным, таким образом, я могу использовать простой.* $ в конце для получения первой строки определения, которое не заканчивается \
5
ответ дан 14 December 2019 в 01:21
поделиться
start        = r"^\s*#define\s+"
continuation = r"(?:.*\\\n)+"
lastline     = r".*$"

re_multiline_macros = re.compile(start + continuation + lastline, 
                                 re.MULTILINE)
4
ответ дан 14 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: