2016-07-11 4 views
2

Я хочу зачитать переменную, указанную ниже в файле.Найти переменную в файлах с помощью RegEx

#define xyz_u8 abc_0x0_u8 = 0x0 (for hex) 
#define xyz_f16 abc_MOD1_f32 = -0.1f (for int and float) 
#define xyz abc_YY = YY_ZZ (for others) 

Я использую

re.compile(r"^#define\s+(\w+)\s+(\w+)(0[xX][0-9a-fA-F]+)") 

для чтения шестигранник, но я не могу получить значение от '='. Может ли кто-то исправить регулярное выражение.

+3

Как насчет простого '. *' Или '. +' В конце? Попробуйте ['(? I)^# define \ s + (\ w +) \ s + (\ w +) = (. +)'] (Https://regex101.com/r/jF2zI3/1) –

+0

Спасибо wiktor .it работал , – user2030113

+1

Отлично, я добавил ответ с объяснением. –

ответ

1

Я предлагаю

^#define\s+(\w+)\s+(\w+) = (.+) 

Используйте его с re.I и re.M (если у вас есть многострочный ввод).

См regex demo

Узор объяснение:

  • ^ - начало строки (или строки, если re.M используется)
  • #define - последовательность буквенных символов
  • \s+ - 1 или более пробелов
  • (\w+) - Группа 1 захвата одного или нескольких слов ([a-zA-Z0-9_]) обугливает
  • \s+ - 1 или более пробельные
  • (\w+) - группа 2 захвата одного или нескольких слов ([a-zA-Z0-9_]) CHARS
  • = - пространство, =, пространство (вы можете добавить + после каждого пространства, чтобы разрешить 1 или больше пробелов, или *, чтобы разрешить 0 или более пробелов)
  • (.+) - Группа 3, которая будет захватывать остальную часть линии.
+0

Если ответ сработал для вас, пожалуйста, рассмотрите Если у вас есть новый вопрос, пожалуйста, спросите. –

Смежные вопросы