У меня есть плоский файл с одним именем функции C ++ и частью ее объявления следующим образом:
virtual void NameSpace1::NameSpace2::ClassName1::function_name1(int arg1) const
void function_name2
void NameSpace2::NameSpace4::ClassName2::function_name3
function_name4
Я пытаюсь извлечь только имена функций, используя эту строку:
fn_name = re.match(":(.*?)\(?", lines)
Я могу понять, почему function_name2
и function_name4
не совпадают (потому что нет ведущего :
. Но я вижу, что даже для function_name1
и function_name3
он не выполняет нежадное совпадение. Результатом fn_name.group()
является
:NameSpace2::ClassName1::function_name1
У меня три вопроса:
- Я ожидал, что из строки 1 будет извлечена только строка «
function_name1
», но нежадное совпадение, похоже, не работает. Почему? - Почему не извлекается строка 3?
- Как получить имена функций из всех строк с помощью одного регулярного выражения?
Пожалуйста помоги.
re.match
соответствует, начиная с начала строки? Ни одна из ваших строк не начинается с двоеточия. Вы пробовали вместо этогоre.search
? - person Bryan Oakley   schedule 19.03.2016