- Необязательные дополнительные слова после аргументов
- Необязательное имя класса с
параметрами шаблона или :: или . (с необязательными пробелами/новой строкой после
)
Код: Выделить всё
//optional additional words after argument (i.e. "onexcept")
dummy_returnType1 class1.dot_func1(uint32 id) onexcept
{
//function contents
}
//optional additional words after argument (i.e. "onexcept")
dummy_returnType1 class1::colon_func1(uint32 id) onexcept
{
//function contents
}
//class name with template
returnType2 class2::template_func2(uint32 id) onexcept
{
//function contents
}
//space after class name (i.e. class3::)
returnType3 class3:: space_func3(uint32 id) onexcept
{
//function contents
}
//new line after class name
returnType4 class4::
newline_func4(uint32 id)
{
//function contents
}
Код: Выделить всё
function_pattern = re.compile(r'(?P\w[\w\s\*&]+)\s+'
r'(?P\w+(?:\[.:\w\s*&:,]\w+)?::)?'
r'(?P\w+)\s*'
r'\((?P[^)]*)\)\s*'
r'(?P[\w\s]*)?'
r'\s*\{',
re.DOTALL | re.MULTILINE
)
for match in function_pattern.finditer(file_content):
function_name = match.group('function_name')
class_name = match.group('class_name')
ожидаемый результат:
функция = func1, класс = класс1
функция = func2, класс = класс2
функция = func3, класс = class3
function = func4, class = class4
Подробнее здесь: https://stackoverflow.com/questions/791 ... sing-regex
Мобильная версия