Я хочу захватить комментарии из файла Java с помощью скрипта Python - PullRequest
0 голосов
/ 23 марта 2019

В целях документации я хочу записать комментарии каждой функции, которая находится над ее кодом.

Я могу повторить файл с именами их функций. Как только я получаю строку с именем функции, я хочу зафиксировать ее комментарий над ней. комментарий в блоке '/ ** xxx * /'

/**
* 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";

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Теперь, когда я знаю, что строка имени функции начинается с @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 означает, что .*? может дать многострочное совпадение и экранирование символов со специальным значением, а именно * как \*.

1 голос
/ 23 марта 2019

это нужно для работы:

data = open(file_name).read()
data = data.split('/**')
data = data.split('*/')
comments = []
for i in range(1, len(data), 2):
    comments.append(data[i])
for k in comments:
    print(k)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...