Теперь, когда я знаю, что строка имени функции начинается с @Attribute
, это довольно легко сделать с помощью регулярного выражения (модуль re
), что можно сделать следующим образом:
import re
content = '''
/**
* this is the comment
* this is the comment
* this is the comment
*/
@Attribute(type = Attribute.STRING.class)
String RESPONSE_TEXT = "responseText";
/**
* this is the comment
* this is the comment
*/
@Attribute(type = Attribute.LONG.class)
String TIME = "clTimestamp";
'''
comments = re.findall(r'(/\*\*.*?\*/)\n(@Attribute[^\n]*)',content,re.DOTALL)
print('Function comments:')
for i in comments:
print(i[1])
print(i[0])
print('\n')
Вывод:
Function comments
@Attribute(type = Attribute.STRING.class)
/**
* this is the comment
* this is the comment
* this is the comment
*/
@Attribute(type = Attribute.LONG.class)
/**
* this is the comment
* this is the comment
*/
Для ясности я жестко закодировал content
, я использовал re.findall
с шаблоном, который имеет две группы, одна для комментария, вторая для имени, таким образом, это дает list
из 2- tuple
s, каждый из которых состоит из комментария и имени функции.Примечание re.DOTALL
означает, что .*?
может дать многострочное совпадение и экранирование символов со специальным значением, а именно *
как \*
.